我总是遇到一个问题,导致与控制器范围变量的定义不一致。
您可能知道使用 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 = this 但除此之外还有解决办法吗?
干杯!
答案 0 :(得分:1)
您有两个选择:
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()
method,它会将调用函数的上下文修改为控制器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));
});