0

index.htmlWas genau bedeutet das im AngularJS Controller?

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

Ein Klick auf h1 Tag-Änderungen {{}} carname sowohl für h1 und h2 zu BMW. Ist es nicht "Dies" bezieht sich auf das aktuelle Element, auf das geklickt wird. Ich bin verwirrt darüber, wie Controller-Eigenschaften unter Ansichten geteilt werden.

+0

Mögliche Duplikat [Wie funktioniert die "this" Schlüsselwort Arbeit?] (Http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work) –

Antwort

2

Die Controller-Funktion wird mit new instanziiert. Das heißt, es funktioniert wie folgt:

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

var s = new StoreController(); 

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

Die s Ihrer Ansicht nach ein Verweis auf die instanziiert StoreController ist, die diese Attribute hat, weil man sie dort in den Konstruktor Funktion setzen. Vielleicht möchten Sie How does the "this" keyword work? für Details sehen.

+0

Danke für die Referenz. Beitrag war hilfreich. – mustafa1993

1

In Ihrem Fall bezieht sich dies auf den Controller selbst.

So ein Attribut in diesem Controller kann mit

this.attribute 

In Ihrem Fall zugegriffen werden Sie den Controller an ein übergeordnetes Element

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

Das bedeutet "zuweisen", dass Sie eine Instanz von erstellen StoreController für den Elementkörper.

Ändern Sie das Attribut Carname Sie ändern es für den gesamten Controller.

Wenn Sie littlebit der OO-Programmierung kennen, können Sie den Controller als eine Klasse sehen und damit die Instanz der Klasse referenzieren.

Dies gilt für Ihren Fall, in Javascript dieser hat manchmal seltsames Verhalten.

Wie von deceze gesagt, können Sie einige Posts ansehen, die erklären, wie dieser in JS funktioniert.

hoffe, das hilft

+0

Ja, ich habe es. Vielen Dank. Genau das bei der OO-Programmierung sagen wir neu zu Konstruktor, der zu einer Klasse gehört. Hier haben wir nur die Funktion. Wo passt die Klasse? – mustafa1993

+1

@mustafa Javascript hat keine Klassen, es hat nur Objekte und Funktionen. Das "Klassen" -Verhalten wird mit dem Verhalten der "this" - und "new" -Schlüsselwörter und des "Prototyps" realisiert. Es ist nur so "OO" wie Klassen-basierte OO, wohl noch mehr, da * alles * ein Objekt ist. Dies ist jedoch nicht der geeignete Ort, um darüber zu sprechen, da gibt es bereits mehr als genug Diskussionen darüber. – deceze

+0

Ja, jetzt weiß ich, wonach ich suchen soll. – mustafa1993