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