Почему "это" присваивается переменной внутри контроллера?
Я новичок в Angular, и я не мог понять, почему мы назначаем это переменной внутри контроллера.
angular.module('NoteWrangler')
.controller('NoteCreateController', function($http){
var controller = this;
this.saveNote = function(note){
controller.errors = null;
$http({method: 'POST', url: '/notes', data: note})
.catch(function(note){
controller.errors = note.data.error;
})
};
});
1 ответ
В общем, в Javascript (или других языках) одна из причин, по которой "this" сохраняется таким образом, заключается в том, что значение "this" не соответствует ожидаемому при вызове других функций в том же классе / объекте. В большинстве случаев, когда функция вызывается из пользовательского интерфейса, значением "this" будет элемент DOME, по которому произошел щелчок, или сторонний объект. Однако вы обычно ожидаете, что "this" является ссылкой на объект, потому что функция принадлежит объекту.
Значение "this" в Javascript не может быть определено с помощью лексической (глядя на структуру кода) области видимости. Значение "this" устанавливается во время выполнения в зависимости от того, как была вызвана рассматриваемая функция.
По сути, вы сохранили ссылку на фактическое "это", чтобы вы могли ссылаться на правильный объект и из других функций.
Я настоятельно рекомендую эту книгу, чтобы понять "это": https://github.com/getify/You-Dont-Know-JS/blob/master/this%20&%20object%20prototypes/README.md#you-dont-know-js-this--object-prototypes