1

übertragenes Isolated Directive Controller Model !!!!!!!!!! Alte Frage

Schauen Sie sich einfach die code (Veraltete). Die isolierte Direktive mit der Vorlage funktioniert, aber diejenige, die in der Ansicht darauf zugreift, tut dies nicht.In den View


Der Neue

verwende ich die gleiche plunk und ich habe @ Andrew Eisenberg Vorschlag hörte transclution in meiner Richtlinie zu verwenden, jedoch ist es immer noch nicht funktioniert.

HTML

<p isolate-with-template></p> 
<p isolate-with-transclude>Hello World {{vm.hi}}</p> 

JS

angular.module('app',[]) 
.directive('isolateWithTemplate',function() { 
    return { 
    restrict: 'A', 
    controllerAs: 'vm', 
    scope:{}, 
    controller: function ($scope) { 
     var vm = this; 
     vm.hi = "hi"; 
    }, 
    template: "{{vm.hi}}" 
    } 
}) 
.directive('isolateWithTransclude',function() { 
    return { 
    restrict: 'A', 
    controllerAs: 'vm', 
    scope: {}, 
    transclude: true, 
    template: "<div ng-transclude></div>", 
    controller: function ($scope) { 
     var vm = this; 
     vm.hi = "hi"; 
    } 
    } 
}) 
+0

Isolierte Bereichsdirektive erwartet eine Vorlage – charlietfl

Antwort

0

ersetzen scope: {},-scope: true, in isolateWithoutTemplate

+0

Mit 'scope: true' ist der Gültigkeitsbereich nicht mehr isoliert. Er erbt prototypisch vom übergeordneten Bereich. –

2

Das Problem, das ist, wenn Sie Inhalte hinzufügen, innerhalb einer Richtlinie, die nicht transkludiert ist , dieser Inhalt wird von der Direktive überschrieben.

Bei Ihrer Anweisung ohne Vorlage wird der gesamte Inhalt einfach entfernt. Sie können dies sehen, wenn Sie nur {{vm.hi}} mit beliebigem Text ersetzen und Sie werden sehen, dass es auch nicht angezeigt wird.

Wenn Sie vm in die Ansicht einschließen möchten, müssen Sie sie durch Hinzufügen der transclude-Eigenschaft zur Richtliniendefinition einschließen. Sie müssten auch eine Vorlage hinzufügen, aber sie könnte leer sein. Weitere Informationen finden Sie unter how to use transclude is available in the angular docs.

+0

Das ist richtig. Um dies hinzuzufügen, sind Child-Elemente, die innerhalb eines Direktiven-Tags * platziert sind, nicht Teil der Direktive *. – Claies

+0

Das ist nicht wahr. Ich habe das Beispiel aktualisiert, um einen Hallo Welttext zu zeigen, und es zeigt –

+0

Hmmm richtig an ... du hast Recht. Ich würde zu meiner ersten (gelöschten) Antwort zurückkehren und sagen, dass es etwas damit zu tun hat, dass 'vm' nicht im Bereich des untergeordneten Elements liegt. –