Javascript AngularJS控制器和方法

Javascript AngularJS控制器和方法,javascript,angularjs,Javascript,Angularjs,我是angularjs的初学者,有一些关于控制器的问题。 以下是我的示例控制器: function exampleController($scope) { $scope.sampleArray = new Array(); $scope.firstMethod = function() { //initialize the sampleArray }; $scope.secondMethod = function() { this.

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

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

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

   $scope.secondMethod = function()
   {
      this.firstMethod();
   };
};
以下是我的问题:

  • 如何从
    secondMethod
    调用
    firstMethod
    ?我这样做是正确的,还是更好的方式
  • 如何为控制器创建构造函数?我需要调用调用初始化sampleArray的第一个方法的第二个方法
  • 如何从html代码中调用特定方法?我找到了ng initialize,但我不知道如何使用它

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

      $scope.secondMethod=function(){
      $scope.firstMethod();
      };
      
      您也可以从HTML调用它,如下所示:

      {{secondMethod()}
      
      但是控制器并没有真正的“构造函数”——它们通常和函数一样使用。但是,您可以将初始化放在控制器函数中,它将像构造函数一样最初执行:

      函数示例控制器($scope){
      $scope.firstMethod=函数(){
      //初始化sampleArray
      };
      $scope.secondMethod=函数(){
      $scope.firstMethod();
      };
      $scope.firstMethod();
      }
      
      使用$scope调用第一个方法

      所以

      我不太清楚你第二个问题的意思

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

      e、 g。 自动运行

      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>
      
      
      运行第二种方法
      
      @Josh和@Christopher已经回答了你的问题,所以我不再重复了

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

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

      <div ng-controller="ExampleCtrl">
         <form name="myForm">
           <input type="text" ng-model="folder" ng-init="folder='Bob'">
      
      
      
      下面是一个需要使用ng init的示例:

      我还想提到的是,控制器不是单例的。如果使用ng view,每次转到不同的路由时,都会创建一个新的控制器。与您要离开的视图关联的控制器将被销毁,与您要离开的视图关联的控制器将被执行。因此,“初始化代码”在应用程序运行时,控制器可能会执行多次。例如,如果您访问某个页面,转到其他位置,然后返回,相同的控制器功能(及其“初始化代码”)将执行两次


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

      我遇到了一个ng init无法避免的例子。有很多关于使用它的警告……使用它肯定是一种使单元测试更困难的黑客行为。但有时你必须做你必须做的事情……在AngularJS的新版本中,$scope不是被弃用了吗?@RaulLuna是的,但答案是4.5年前的。:-)呃。。。好吧,但是在谷歌上寻找答案。我认为值得一提。
      <div ng-controller="ExampleCtrl">
         <form name="myForm">
           <input type="text" ng-model="folder" ng-init="folder='Bob'">