22

我是 angularjs 的初学者,有一些关于控制器的问题。
这是我的示例控制器:

function exampleController($scope)
{
   $scope.sampleArray = new Array();

   $scope.firstMethod = function()
   {
      //initialize the sampleArray
   };

   $scope.secondMethod = function()
   {
      this.firstMethod();
   };
};

以下是我的问题:

  • 我怎么能firstMethod打电话secondMethod?我做的方式是正确的,还是更好的方式?
  • 如何为控制器创建构造函数?我需要调用调用 firstMethod 初始化 sampleArray 的 secondMethod 吗?
  • 如何从 html 代码中调用特定方法?我找到了 ng-initialize 但我不知道如何使用它。
4

3 回答 3

32

您调用方法的方式与声明它的方式相同:

$scope.secondMethod = function() {
  $scope.firstMethod();
};

您也可以像这样从 HTML 调用它:

<span>{{secondMethod()}}</span>

但是控制器并没有真正的“构造函数”——它们通常像函数一样使用。但是你可以将初始化放在你的控制器函数中,它最初会被执行,就像一个构造函数:

function exampleController($scope) {
  $scope.firstMethod = function() {
    //initialize the sampleArray
  };

  $scope.secondMethod = function() {
    $scope.firstMethod();
  };

  $scope.firstMethod();
}
于 2013-01-18T21:40:44.443 回答
7

您使用 $scope 调用第一个方法。

所以

   $scope.secondMethod = function()
   {
      $scope.firstMethod();
   };

不太确定您在第二个问题中的意思。

对于您的第三个问题,您可以让该方法在控制器上自动“加载”运行,或者通过前端角度绑定运行它。

例如 自动运行

function exampleController($scope)
{
   $scope.sampleArray = new Array();

   $scope.firstMethod = function()
   {
      //initialize the sampleArray
   };

   $scope.secondMethod = function()
   {
      $scope.firstMethod();
   };


   $scope.secondMethod(); // runs automatically.

};

绑定运行

<div ng-controller="ExampleController"> <!-- example controller set up in namespace -->

<button class="btn" ng-click="secondMethod()">Run Second Method</button>

</div>
于 2013-01-18T21:41:21.443 回答
7

@Josh 和 @Christopher 已经回答了你的问题,所以我不会重复。

我找到了 ng-initialize 但我不知道如何使用它:-(

该指令实际上是ng-init。有时(例如,如果您开始在应用程序的某些部分中使用 Angular,并且您仍然需要在服务器端动态生成视图/HTML 页面),ng-init 有时可能是初始化某些东西的有用方法。例如,

<div ng-controller="ExampleCtrl">
   <form name="myForm">
     <input type="text" ng-model="folder" ng-init="folder='Bob'">

这是一个需要使用 ng-init 的示例:rails + angularjs 在编辑时将值加载到文本字段中

我还想提一下,控制器不是单例。如果你使用 ng-view,每次你去不同的路线时,都会创建一个新的控制器。与您要离开的视图关联的控制器被销毁,与您将要进入的视图关联的控制器被执行。因此,控制器中的“初始化代码”可以在应用程序运行时多次执行。例如,如果你访问一个页面,去别处,然后回来,相同的控制器函数(及其“初始化代码”)将被执行两次。

如果您希望某些东西真正运行一次,请将其放入服务或模块的 config() 或 run() 方法中。(服务是单例的,因此每个服务只实例化一次,因此服务中的初始化代码只运行一次。)

于 2013-01-19T02:43:39.330 回答