AngularJS使用bind(this)
我最近转向在ngRoute和Directives中的控制器和控制器中使用“ this ”,而不是直接使用$ scope 。 虽然我非常喜欢代码的外观,但我必须手动将“this”绑定到每个函数。
例:
app.controller('mainController', function ($scope, Restangular) {
this.title = '';
$scope.$on('changeTitle', function (event, data) {
this.title = data;
}.bind(this)); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
});
我明白为什么我必须这样做(“ 这个 ”背景不断变化),有没有更好的解决方案(更清洁,更实用),我应该考虑做些什么?
谢谢。
ES6中的胖箭头功能专门用于解决此问题。 使用胖箭头函数可以继承父范围的上下文,因此不再需要使用bind或var that = this
。 所以你可以看看蒸发。
app.controller('mainController', function ($scope, Restangular) {
this.title = '';
$scope.$on('changeTitle', (event, data) => {
this.title = data;
});
});
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
最简单的方法是把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而不是自我)。
https://github.com/johnpapa/angular-styleguide#style-y032
你可以使用
Angular.bind(this,function(){})
如此处和此答案中所述
所以你会有这样的东西:
this.defaultCity = 'myvalue';
callHttpService(this.defaultCity).then(angular.bind(this, function(res) {
this.defaultCity = res.data;
}));
链接地址: http://www.djcxy.com/p/96999.html