Angularjs中angular.bind的用途是什么?请提供一个例子。无法理解https://docs.angularjs.org/api/ng/function/angular.bind
答案 0 :(得分:37)
Angular.bind是一个效用函数,它结合了function.bind和partial 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