在ControllerAs AngularJS中调用子函数

Posted

技术标签:

【中文标题】在ControllerAs AngularJS中调用子函数【英文标题】:Calling sub function in ControllerAs AngularJS 【发布时间】:2016-08-03 22:31:13 【问题描述】:

嘿,我是 angularjs 的新手,我在 angularjs 中使用 controlleras 样式,因为代码既美观又干净。我的问题是在控制器中调用子函数我的代码如下

 //AngularJS CODE
      (function()
         'use strict';

         angular.module('mAPP', ['ngMaterial']);

         function helpM()
            var vm = this; 
            vm.SaveM = function()
                alert('Save Me Now');
            
         

        function SaveCTRL()
          var vm = this; 

          vm.nineOne = helpM.SaveM;
        

        angular.module('mAPP')
                .controller('SaveCTRL', [SaveCTRL]); 

      )(); 

//html 代码

     <div ng-controller="SaveCTRL as main" layout="column" ng-cloak="" class="md-inline-form" ng-app="mAPP">


     <md-button class="md-raised md-primary" ng-click="main.nineOne()">Submit</md-button>

     </div>

但是警报没有执行提前非常感谢:(

【问题讨论】:

【参考方案1】:

您必须创建helpM 的实例,否则this 将是undefined

(function() 
  'use strict';

  angular.module('myApp', []);

  function helpM() 
    var vm = this;
    vm.SaveM = function() 
      alert('Save Me Now');
    
    return vm;
  


  function SaveCTRL() 
    var vm = this;

    vm.nineOne = new helpM().SaveM;

    return vm;
  

  angular.module('myApp')
    .controller('SaveCTRL', SaveCTRL);

)();
<body ng-app="myApp">
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
  <div ng-controller="SaveCTRL as main" layout="column" ng-cloak="" class="md-inline-form">


    <md-button class="md-raised md-primary" ng-click="main.nineOne()">Submit</md-button>

  </div>
</body>

【讨论】:

所以将函数视为需要作为实例的类才能获取 this 的值?谢谢它的作品【参考方案2】:

你需要实例化 helpM 类:

替换:

vm.nineOne = helpM.SaveM

收件人:

var helpObj = new helpM();
vm.nineOne = helpObj.SaveM.bind(helpObj);

【讨论】:

谢谢,但我遇到一个错误,它说无法读取未定义的属性“绑定”

以上是关于在ControllerAs AngularJS中调用子函数的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS ControllerAs 语法和控制器注入变量

在 Angular 1.5 组件中使用 ControllerAs

Angular - 带有 controllerAs、bindToController 和 $scope.$watch 的指令

AngularJS 绑定问题

Angularjs:“控制器作为语法”和 $watch

angularJS 系列---$emit(), $on(), $broadcast()的使用