【问题标题】:Why "this" is assigned to a variable inside the controller?为什么将“this”分配给控制器内的变量?
【发布时间】:2015-10-03 18:28:14
【问题描述】:

我是 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;
        })
    };
});

【问题讨论】:

  • 尝试在回调中使用this.errors .... this 在那里完全不同。与 Angular 无关,与 javascript 作用域和闭包有关
  • 因为this 是函数作用域。因此,如果您想在上层范围内访问this 的值,请将其存储在一个变量中。

标签: javascript angularjs ngroute angular-controller


【解决方案1】:

一般来说,在 Javascript(或其他语言)中,“this”这样保存的原因之一是,当同一类/对象中的其他函数被保存时,“this”的值不是您所期望的调用。大多数情况下,从 UI 调用函数时,“this”的值将是发生单击的 DOMElement 或第 3 方对象。但是,您通常会认为“this”是对象引用,因为该函数属于该对象。

Javascript 中“this”的值不能由词法(通过查看代码结构)范围确定。 "this" 的值在运行时根据相关函数的调用方式设置。

所以基本上你保存了对实际“this”的引用,这样你也可以从其他函数中引用正确的对象。

我强烈推荐这本书来理解“这个”: https://github.com/getify/You-Dont-Know-JS/blob/master/this%20&%20object%20prototypes/README.md#you-dont-know-js-this--object-prototypes

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 2015-10-03
    • 2016-02-10
    • 2022-10-05
    • 2013-04-04
    • 2012-12-24
    • 1970-01-01
    • 2018-03-01
    • 2016-05-12
    相关资源
    最近更新 更多