的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”指的是被点击的当前元素。我对在视图之间如何共享控制器属性感到困惑。
答案 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中如何运作的帖子。
希望这会有所帮助