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

上一篇: AngularJS using bind(this)

下一篇: Ember, mixin to detect click outside of view/component