2013-10-24 3 views
5

Ich habe Direktive myDirective, die eine Zwei-Wege-Bindung zu isolieren Bereich hat. Wenn der Benutzer auf eine Schaltfläche klickt, möchte ich den Isolationsumfang als Wert ändern. Ich dachte, isolate scopes wären an den $ scope gebunden, aber ich liege falsch. Wie kann ich mit diesem isolierten Bereich "greifen" und interagieren? Sind sie nicht an den Anwendungsbereich des Direktiven des Direktors gebunden?Wie interagieren Sie mit isolieren Bereich Variable innerhalb einer Anweisung Controller?

angular.module("app", []) 
.controller("myCtrl", function($scope){ 
    $scope.ctrlTwoway = "Eggs"; 
}) 
.directive("myDirective", function(){ 
    return { 
     scope: { 
      twoway: = 
     }, 
     template: "<button ng-click="changeTwoway()">Change two way isolate scope</button>", 
     controller: function($scope, $element, $attrs){ 
      $scope.changeTwoway = function(){ 
       // get twoway from isolate scope, and update the value with "bacon" 
       // $scope.twoway = "bacon" doesn't work 
       // nor does $attrs.twoway = "bacon" work, either :(
      }; 
     } 
    } 
}); 

Und der HTML

... 
<div my-directive twoway="{{ctrlTwoway}}"></div> 
Current value: {{ctrlTwoway}} 
+1

Sie sind sicher, dass 'controller:' nicht 'link:' gemeint ist? – tymeJV

+0

Ich denke, Sie haben einen Tippfehler für "twoway: =", es sollte "twoway: '='" – TrtG

Antwort

10

habe ich eine Plunker mit working version.

Sie müssen {{variable}} nicht auf twoway="" setzen. Wechseln Sie einfach zu twoway="ctrlTwoway" um zu arbeiten.

Eine andere Sache ist, dass die Art, wie Sie die Bindung erklären. Sie verwenden = anstelle von '='.

Eine andere Sache ist: Versuchen Sie, die Link-Funktion anstelle der Controller-Funktion in Richtlinien zu verwenden. Es ist eine gute Übung und der richtige Ort, wenn Sie DOM-Elemente manipulieren möchten.

Source

Ich hoffe, es hilft.

+0

Das ist die Antwort! Vielen Dank –

Verwandte Themen