Подтвердить что ты не робот

Каково использование angular.bind в angularjs? Где его использовать?

что используется angular.bind в Angularjs. Просьба привести пример. Не могу понять из https://docs.angularjs.org/api/ng/function/angular.bind

4b9b3361

Ответ 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