为什么我们将控制器变量设置为等于“0”;这个“;在角度上

Why do we set controller variables equal to "this" in angular?

本文关键字:这个 我们将 设置 变量 为什么 控制器      更新时间:2023-09-26

因此,我在第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)。

不过,它不是全球性的,只是一个范围更广的变量。

相关文章: