我最近转而使用控制器中的“ this ”和ngRoute和Directives中的 controllerAs ,而不是直接使用 $ scope 。虽然我真的很喜欢代码的外观,但我必须手动将“this”绑定到每个函数。
示例:
app.controller('mainController', function ($scope, Restangular) {
this.title = '';
$scope.$on('changeTitle', function (event, data) {
this.title = data;
}.bind(this)); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
});
我明白为什么必须这样做(“此”上下文不断变化),我应该考虑做更好的解决方案(更干净,更实用)?
感谢。
答案 0 :(得分:7)
ES6中的胖箭头功能专门用于解决此问题。使用胖箭头函数可以继承父作用域的上下文,因此您不必再使用bind或signed char
。所以你可以调查一下。
var that = this
Angular 2是用ES6编写的,使用了Traceur编译器:http://angularjs.blogspot.sg/2014/03/angular-20.html,这里有一篇关于如何在自己的代码中使用它的简短帖子:http://www.benlesh.com/2014/03/traceur-is-awesome-but-still-little.html
答案 1 :(得分:3)
最简单的方法是将this
放在一个对象中。
app.controller('mainController', function ($scope, Restangular) {
var self = this;
self.title = '';
$scope.$on('changeTitle', function (event, data) {
self.title = data; // Due to scope inheritance in javascript, self is defined here.
});
});
这个版本也是许多角色用户的最佳实践,包括John Papa(他称之为vm而不是self)。
答案 2 :(得分:0)