[英]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;
});
});
现在的问题是this.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));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.