因此,我在 1.5 节中查看了代码学校中保持尖锐和 Angular 示例。 继承人的代码:
angular.module('NoteWrangler')
.controller('NotesIndexController', function($http) {
var controller = this;
$http({method: 'GET', url: '/notes'}).success(function(data){
controller.notes = data;
})
});
我阅读了 Mozilla 的 [this][1] 开发者网络指南,但我的理解仍然不是很好。
在上面示例的以下行中。
var controller = this;
为什么我们要将 controller = 设置为此?为什么不只使用 var controller;? 或者通过将其设置为等于此值使其成为全局变量,否则在成功回调中只会更改其自己的本地 Controller 变量,而不是在 Controller 中声明的变量?
如果提供任何线索,他们随后会在 html 中执行以下操作:
<div class="note-wrapper">
<a class ="card-notes" ng-repeat="notes in indexController.notes">
</a>
</div>
最佳答案
Why not just have var controller;?
因为这意味着 controller
将是 undefined
。
var controller;
document.querySelector('pre').innerHTML = controller;
<pre></pre>
is by setting it equal to this making it a global variable
您不是在创建一个全局 变量,而是在创建一个closed over。多变的。这意味着您可以在回调中使用该值。为了在回调中使用该值,您需要创建闭包变量或绑定(bind)函数。
var controller = {
hello: 'world'
};
// Just so we have to use a callback
setTimeout(function() {
console.log(this);
}, 0);
// Using a closure variable
setTimeout(function() {
console.log(controller);
}, 0);
// Binding a function
setTimeout(function() {
console.log(this);
}.bind(controller), 0);
关于javascript - 为什么我们在 Angular 上将 Controller 变量设置为 "this"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032618/