javascript - 为什么 "this"被分配给 Controller 内部的变量?

标签 javascript angularjs ngroute angular-controller

我是 Angular 的新手,我不明白为什么我们将其分配给 Controller 内的变量。

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

最佳答案

一般来说,在 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

关于javascript - 为什么 "this"被分配给 Controller 内部的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32925986/

相关文章:

angularjs - 显示 View 名称的正确方法

javascript - 使用 angularjs 加载多个 View

javascript - 更新嵌套几次对象的 MongoDB 问题

javascript - Node.js - 从域模型中抽象 Mongoose 模型

javascript - 如何使用 Mocha 创建自定义记者

angularjs - ng-repeat 访问对象内部的数组

javascript - 使用带有注入(inject) promise 的 ngRoute 'resolve' 参数

javascript - 如何使用 Angular js 从另一个数组创建 JSON 对象数组

javascript - 在谷歌图表AngularJS中添加行

angularjs - Angular 项目的粒子js背景?