angular.bind在angularjs中有什么用?在哪里使用它?

时间:2015-05-29 12:42:39

标签: angularjs

Angularjs中angular.bind的用途是什么?请提供一个例子。无法理解https://docs.angularjs.org/api/ng/function/angular.bind

4 个答案:

答案 0 :(得分:37)

Angular.bind是一个效用函数,它结合了function.bindpartial function application中的功能。

绑定(通常)是想要将当前上下文绑定到函数,但实际上稍后执行它的想法。

当使用$http进行HTTP调用并处理promise时,这在角度有用:

$http.get('url').then(angular.bind(this, 
    function(response) { 
        this.response = response; //use this (which is the bound context) 
    });

在上面的示例中,除非我们明确this,否则函数内的this not 引用$http上下文中的bind它。这是一个常见的JavaScript问题(在回调中),因为它的上下文动态绑定(这与大多数流行的面向类的语言不同)。

当您想要创建一个已经传递某些参数的函数时,会使用

部分应用程序。一个非常简单的例子:

function add(x, y) { 
    return x + y; 
}

var add10To = angular.bind(this, add, 10);

console.log(add10To(5));
// outputs 15

使用Angular.bind,Angular团队将两者结合在一起。

答案 1 :(得分:7)

这是函数式语言所基于的经典函数之一。它允许我们使用部分功能。请注意,这不是特定于角度的,这是特定于Javascript的。 Javascript的大多数实用程序库也包含此函数(例如Underscore / Lodash)。

如今,此功能是Javascript本身的一部分(所有主流浏览器均支持 - 请参阅Which browsers support bind()?)。

要解释bind的作用,我将参考Lodash文档中的示例(将原始_.bind替换为angular.bind并添加一些注释):

//this is a simple function. Note it uses "this" but it's not inside any object.
var greet = function (greeting, punctuation) {
  return greeting + ' ' + this.user + punctuation;
};

//now let's define an object
var object = { 'user': 'fred' };

//now we can create a functions by "binding" the object with the function above and also supplying the "greeting" argument
var bound = angular.bind(object, greet, 'hi');
bound('!');
// → 'hi fred!'

答案 2 :(得分:2)

AngularJS中的所有数据都应该是$ scope对象的属性。该框架设法将任何ng-click路由到引擎盖下的正确范围对象,而开发人员不会考虑这一点。在被调用函数内部,这指向$ scope对象

<body ng-controller="MainCtrl">
  <p ng-click="clickMe()">Click me</p>
</body>
when clicked the following controller function

app.controller('MainCtrl', function($scope) {
  $scope.clickMe = function() {
    console.log(this === $scope);
  };
});
// prints true
在AngularJs控制器代码中经常不使用

function.bind:在控制器函数内定义的函数只使用$scope对象来访问数据而不是附加到此的属性。甚至链接函数内定义的函数也可以直接使用范围变量。

参考:http://bahmutov.calepin.co/why-function-bind-matters-little-in-angularjs.html

答案 3 :(得分:2)

请查看以下链接,了解有关此问题的更多见解 http://learnkode.com/Examples/Angular/angular-bind