在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 的指令