为什么我们将控制器变量设置为等于“0”;这个“;在角度上
Why do we set controller variables equal to "this" in angular?
因此,我在第1.5节中看到了代码库中保持棱角分明的示例。这是代码:
angular.module('NoteWrangler')
.controller('NotesIndexController', function($http) {
var controller = this;
$http({method: 'GET', url: '/notes'}).success(function(data){
controller.notes = data;
})
});
我阅读了Mozilla的开发者网络指南,但我的理解仍然不太好。
在上例的下一行中。
var controller = this;
为什么要将controller=设置为这个?为什么不只是有var控制器还是通过将其设置为等于,使其成为全局变量,否则在成功回调中,它只会更改自己的本地控制器变量,而不是控制器中声明的变量?
如果html提供了任何线索,他们稍后会在html中执行以下操作:
<div class="note-wrapper">
<a class ="card-notes" ng-repeat="notes in indexController.notes">
</a>
</div>
为什么不只是有var控制器;?
因为这意味着controller
将是undefined
。
var controller;
document.querySelector('pre').innerHTML = controller;
<pre></pre>
是通过将其设置为等于,使其成为全局变量
您不是在创建全局变量,而是在创建一个闭式变量。这意味着您可以在回调中使用该值。为了在回调中使用该值,您需要创建一个闭包变量或绑定函数。
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);
通过将变量设置为this
,可以在使用controllerAs
语法时添加新的命名空间。
function OneCtrl() {
this.notes = "foo";
}
function TwoCtrl() {
this.notes = "bar";
}
HTML:
<div ng-controller="OneCtrl as ctrl1">
{{ctrl1.notes}}
<div ng-controller="TwoCtrl as ctrl2">
{{ctrl2.notes}}
</div>
</div>
如果没有controllerAs
,您将不得不使用$parent
,这实际上是一种糟糕的做法。成像必须使用$parent.$parent.$parent.$parent.someValue
。
进一步阅读:http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/07/02/exploring-angular-s-controller-as-syntax-and-the-vm-variable.aspx
是不是通过将其设置为等于,使其成为全局变量,否则在成功回调中,它只会更改自己的本地控制器变量,而不是控制器中声明的变量?
this
的值取决于函数的调用方式。
当你有一个新函数时,你会在里面有一个this
的新值
将其存储在另一个变量中意味着内部函数可以读取该变量的值(因为它无法访问相同的this
)。
不过,它不是全球性的,只是一个范围更广的变量。
- 我们怎样才能将内含子J用于一组特定的元素
- 如何将对象传递给这个js函数
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 我们可以在初始化variable Angular JS时将变量值声明为未定义吗
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 我如何才能在点击按钮时将我的数字和财富显示在这个脚本上
- 改变“;onClick"这个jQuery的操作从清除输入文本改为将输入文本添加到下面的列表中
- 我们将如何获得特定<ul>在jquery中
- 为什么我们将 Angular 应用程序包装在一个函数中
- 为什么我们将“(keyup)”分配给模板局部变量的随机值以在 Angular2 中更新
- 我们将 npm 安装的节点模块放在 Meteor 项目中的什么位置
- 有人请向我解释一下这个 JavaScript 将用 /
]*>>/g 替换什么 - jQuery:Can'我们将jQuery(this)赋值给一个变量
- 有没有办法进一步优化这个JavaScript(将当前时间与开放时间进行比较)
- 当我们将日期选择器设置为只读模式时,如何防止鼠标指针阻塞符号
- 为什么我们将空值传递给XMLHttpRequest.send ?
- 在jquery事件中,为什么我们将function()作为参数传递
- 我们将称之为变量var variableName='{}'
- 为什么我们需要将window和undefined传递到这个jquery插件中
- 当我们将一个方法存储在一个变量中,然后调用它时,为什么上下文对象会变为全局窗口对象