2016-05-09 6 views
0

Also, das ist mein Problem. Ich habe zwei Richtlinien (zB Mutter Richtlinie und Kind-Richtlinie) und ich rufe Kind Richtlinie von den Eltern Richtlinie wie folgt aus:Wie Element in Post-Funktion der Kompilierung anhängen - AngularJS

angular.module('components', []) 
    .directive('helloWorld', function() { 
    return { 
     restrict: 'E', 
     compile: function(element, attrs) { 
       var x = '<directive2></directive2>'; 
       element.append(x); 
     } 
    } 
    }) 
    .directive("directive2", function($compile, $parse) { 
     return { 
     restrict: 'E', 
     compile: function(iElement, iAttrs, transclude) { 
      iElement.append('<p>directive2</p>'); 
     } 
     } 
    }); 

angular.module('HelloApp', ['components']) 

Dies funktioniert gut. Aber jetzt schreibe ich eine Bedingung in der Post-Funktion des Kompilierens und wenn diese Bedingung erfüllt, sollte die Kind-Anweisung anhängen.

Ich habe gerade die Append-Funktion in der Post-Funktion hinzugefügt, aber es funktioniert nicht.

angular.module('components', []) 
.directive('helloWorld', function() { 
    return { 
    restrict: 'E', 
    compile: function(element, attrs) { 
     return { 
     post: function(scope, element, attrs) { 
     var x = '<directive2></directive2>'; 
     element.append(x); 
     } 
    } 
    } 
    } 
}) 
.directive("directive2", function($compile, $parse) { 
return { 
    restrict: 'E', 
    compile: function(iElement, iAttrs, transclude) { 
    iElement.append('<p>directive2</p>'); 
    } 
    } 
}); 

angular.module('HelloApp', ['components']) 

Ich weiß nicht, was schief gelaufen ist. Führe mich Freunde

jsFiddle

Antwort

1

Sie müssen den $compile Service nutzen, bevor wie unten angehängt:

angular.module('components', []) 
    .directive('helloWorld', function($compile){ 
    return { 
     restrict: 'E', 
     link: function(scope, element, attrs) { 
     var x = angular.element('<directive2></directive2>'); 
     element.append($compile(x)(scope)); 
     } 
    } 
    }) 
    .directive("directive2", function() { 
    return { 
     restrict: 'E', 
     compile: function(element, attrs, transclude) { 
     element.append('<p>directive2</p>'); 
     } 
    } 
    }); 

angular.module('HelloApp', ['components']); 

http://jsfiddle.net/2zbabkjb/2/

+0

danke Mann. Es funktionierte :) – Thinker

1

Try-Vorlage auf Ihre erste Richtlinie zu definieren:

angular.module('components', []) 
.directive('helloWorld', function() { 
    return { 
     restrict: 'E', 
     template: '<directive2></directive2>' 
    } 
    } 
}) 
+0

Vielen Dank für die Antwort . Aber wenn ich die Vorlage definiere, wird sie die Anweisung anhängen, auch wenn die Bedingung innerhalb der Post-Funktion falsch ist. Ich sollte die Anweisung innerhalb der Post-Funktion nur anfügen – Thinker

+0

Ok, in diesem Fall sollten Sie manuell Ihre Vorlage kompilieren. Sie sollten $ kompilieren Service auf Ihre Direktive injizieren und schreiben Sie dies: element.append ($ compile (x) (scope)); http://jsfiddle.net/36qp9ekL/1287/ – Silvinus

+0

können wir die Anweisung innerhalb der Post-Funktion aufrufen? Ich muss es in der Post-Funktion anrufen – Thinker