Каково использование angular.bind в angularjs? Где его использовать?
что используется angular.bind в Angularjs. Просьба привести пример. Не могу понять из https://docs.angularjs.org/api/ng/function/angular.bind
Ответы
Ответ 1
Angular.bind - это функция утилиты, которая объединяет функциональные возможности в function.bind и приложении частичной функции.
привязка (в общем) - это идея, что вы хотите привязать текущий контекст к функции, но на самом деле выполните ее позже.
Это может быть полезно в angular при выполнении HTTP-вызовов с помощью $http
и обработки promises:
$http.get('url').then(angular.bind(this,
function(response) {
this.response = response; //use this (which is the bound context)
});
В приведенном выше примере this
внутри функции не будет ссылаться на this
в контексте $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 предоставляет оба этих файла вместе.
Ответ 2
Это одна из классических функций, на которых основаны функциональные языки. Это позволяет нам работать с частичными функциями. Обратите внимание, что это не спецификация angular, это спецификация Javascript. В большинстве библиотек утилиты для Javascript также включена эта функция (например, Underscore/Lodash).
В настоящее время эта функция является частью самого Javascript (поддерживается во всех основных браузерах - см. Какие браузеры поддерживают bind()?).
Чтобы объяснить, что делает bind
, я буду ссылаться на пример в документации Lodash (заменив исходный _.bind
на angular.bind
и добавив некоторые комментарии):
//this is a simple function. Note it uses "this" but it not inside any object.
var greet = function (greeting, punctuation) {
return greeting + ' ' + this.user + punctuation;
};
//now let 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!'
Ответ 3
Все данные в 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
function.bind
не часто используется внутри кода контроллера AngularJs: функции, определенные внутри функции контроллера, просто используют объект $scope
для доступа к данным вместо прикрепленных к нему свойств. Даже функции, определенные внутри функции связи, могут напрямую работать с переменной области видимости.
Ссылка: http://bahmutov.calepin.co/why-function-bind-matters-little-in-angularjs.html
Ответ 4
Проверьте следующую ссылку, чтобы узнать больше об этом вопросе
http://learnkode.com/Examples/Angular/angular-bind