2016-11-09 1 views
1

Ich hätte schwören können, dass ich früher gearbeitet habe, aber jetzt kann ich den übergeordneten Bereich nicht mehr aktualisieren und auf der Seite anzeigen.

Im Elternteil habe ich einige ein einfacher Bereich, den ich von der Direktive aktualisieren möchte. Im übergeordneten Controller habe ich es so eingestellt.

$scope.messageContent = 'The initial content'; 

In der übergeordneten Ansicht habe ich es

angezeigt
{{$scope.messageContent}} 

ich für einen Test ist es sehr einfach gemacht und hier ist die Richtlinie. In meiner Link-Funktion in der Direktive habe ich diesen Code:

link: function (scope, element, attrs) { 
    scope.$parent.messageContent = 'New content'; 
} 

Es wird einfach nicht die Eltern aktualisieren. Was fehlt mir hier?

Dank

+0

Sie können versuchen, und Broadcast-http://stackoverflow.com/questions/29999407/send-an-event-using-emit-from-directive-to-controller –

Antwort

0

Sie haben wahrscheinlich eine ng-if oder eine andere Winkel Richtlinie (ng-repeat, ng-Schalter, ...), die einen neuen Bereich erstellt, so dass Sie die Kette mit mehr $parent Erklärungen steigen müssen.

Bessere Option ist ein Objekt zu verwenden.

-Controller:

$scope.message = {content: 'some content'}; 

Richtlinie

link: function (scope, element, attrs) { 
    scope.message.content = 'New content'; 
} 

ein Objekt anstelle eines primitiven Verwendung des Auflösungsproblem aufgrund von JavaScript prototypal Vererbung funktioniert zu lösen.
Für eine ausführliche Antwort - sehen: What are the nuances of scope prototypal/prototypical inheritance in AngularJS?

+0

emittieren Dies sollte der Bereich sein. $ Parent.message.content = 'Neuer Inhalt'; ? –

+0

Nein, in JS werden prototypische Vererbungsobjekte anders behandelt als primitive. –

+0

Ok, danke. Funktioniert aber nicht. Der Inhalt der Eigenschaft "nicht definiert" kann nicht festgelegt werden. Ich verstehe das in meiner Direktive. Bitte beachten Sie, dass sich der Controller in diesem Fall im Elternteil befindet. Nicht der Controller in der Direktive. Ich verwende Link nur in der Direktive. –

Verwandte Themen