0

的index.htmlAngularJS控制器究竟是什么意思?

<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标签的变化{{carname}}两个H1和H2宝马。是不是“this”是指被点击的当前元素。我很困惑如何在视图间共享控制器属性。

+0

的可能的复制[如何进行 “this” 关键字的工作?](http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) –

回答

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?

+0

感谢您的参考。帖子很有帮助。 – mustafa1993

1

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

所以在这个控制器的任何属性都可以与

this.attribute 

在你的情况来访问你“分配”控制器父元素

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

这意味着你创建的实例StoreController为元素正文。

更改属性carname您将其更改为整个控制器。

如果您知道面向对象编程的一点点,您可以将控制器看作一个类,并且您可以参考该类的实例。

对于你的情况,这是真的,在JavaScript 这个有时会有一些奇怪的行为。

正如所说的你可以看看一些帖子,解释如何工程在JS。

希望这有助于

+0

是的,我懂了。谢谢。只是在OO编程中,我们对属于一个类的构造函数进行了新的说明。这里我们只有这个功能。班级在哪里适合这里? – mustafa1993

+1

@mustafa Javascript没有类,它只有对象和函数。 “类”行为是通过'this'和'new'关键字和'prototype'的行为来实现的。它与基于类的OO一样“OO”,可以说更是如此,因为* everything *是一个对象。虽然这不是适当的地方,但已经有足够多的讨论。 – deceze

+0

是的,现在我知道该搜索什么。 – mustafa1993

相关问题