究竟“这个”在AngularJS控制器中意味着什么?

时间:2016-08-04 08:45:40

标签: javascript angularjs model-view-controller controller angularjs-controller

的index.html

 <body ng-controller="StoreController as s">
  <h1 ng-click="s.changeValFunc()">{{s.carname}}</h1>
  <h2>{{s.carname}}</h2>
  </body>

app.js

var app = angular.module('store', []);
app.controller('StoreController', function() {
    this.carname = "Volvo";
    this.changeValFunc = function(){
        this.carname="BMW";
    }
});

点击h1标签会将h1和h2的{{carname}}更改为BMW。不是它“this”指的是被点击的当前元素。我对在视图之间如何共享控制器属性感到困惑。

2 个答案:

答案 0 :(得分:2)

控制器功能用new实例化。这意味着它的工作原理如下:

function StoreController() {
    this.carname = "Volvo";
    this.changeValFunc = function () {
        this.carname="BMW";
    }
};

var s = new StoreController();

console.log(s.carname); // Volvo

视图中的s是对实例化StoreController的引用,它具有这些属性,因为您将它们放在构造函数中。您可能希望查看How does the "this" keyword work?了解详细信息。

答案 1 :(得分:1)

在你的情况下,这是指控制器本身。

因此可以使用

访问该控制器中的任何属性
this.attribute

在您的情况下,您将控制器“分配”到父元素

<body ng-controller="StoreController as s">

这意味着您为元素主体创建 StoreController 的实例。

更改属性 carname ,您可以为整个控制器更改它。

如果您对OO编程知之甚少,可以将控制器视为一个类,并使用它来引用该类的实例。

这适用于您的情况,在javascript中有时会出现一些奇怪的行为。

正如deceze所说,你可以看一些解释这个在JS中如何运作的帖子。

希望这会有所帮助