Angular JS使用controllerAs和这个语法与范围或这个变量
Angular JS using controllerAs and this syntax with scope or this variables
我一直会遇到一个问题,它导致与控制器范围变量的定义不一致。
您可能知道,使用 controllerAs 语法,您必须在控制器函数中将此实例附加所有变量,如下所示:
angular.module('angularJsInternationalizationApp')
.controller('MainCtrl', function (SampleService) {
this.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
this.translatedFromService = '';
SampleService.getTranslation().then(function(data){
this.translatedFromService = data;
});
});
现在的问题是这个.translatefDromService不能从任何服务的成功或错误函数更新,或者实际上任何其他函数,因为它将其作为新功能的实例而不是控制器。
在这种情况下可以做什么。
我使用了一种解决方案,您将此标记为 vm。VaR VM = 这是在控制器的开头,但除此之外还有什么解决方案吗?
干杯!
您有 2 个选项:
1) 使用vm = this
方法,保持指向控制器上下文的链接this
:
angular.module('angularJsInternationalizationApp')
.controller('MainCtrl', function (SampleService) {
var vm = this;
vm.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
vm.translatedFromService = '';
SampleService.getTranslation().then(function(data){
vm.translatedFromService = data;
});
});
2) 在处理程序上使用 bind()
方法,该方法会将调用函数的上下文修改为控制器的this
:
angular.module('angularJsInternationalizationApp')
.controller('MainCtrl', function (SampleService) {
this.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
this.translatedFromService = '';
SampleService.getTranslation().then(function(data){
this.translatedFromService = data;
}.bind(this));
});
相关文章:
- ngDialog-弹出窗口未更新范围变量
- AngularJS范围变量Unwatch
- 将外部控制器的范围变量设置为角度
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- 具有范围变量的控制器不工作
- 范围变量返回长度错误
- 将 NodeJS 模块范围变量作为对象访问
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 递归承诺调用 - 内存范围变量问题
- AngularJS:从指令设置范围变量
- Angularjs:访问范围变量数组并计算平均值
- 范围变量更新,但不更新视图
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 如何在编辑范围变量时(暂时)避免摘要循环
- 防止Angular范围变量通过引用自动绑定到服务私有成员
- 使用 AngularJS 从指令设置范围变量
- 集合回调忽略范围变量
- 使用forEach修改角度范围变量
- 因果报应测试中未定义的预期范围变量