2016-06-01 5 views
1

Ich habe eine Direktive eingerichtet, die eine Funktion vom übergeordneten Controller als eines ihrer Attribute übernimmt. Diese Funktion wird durch den Direktiven-Controller ersetzt und ist für den übergeordneten Controller über die übergebene Funktion zugänglich. Das Problem, auf das ich stoße, ist, wenn ein ng-if-Attribut auf die Direktive gesetzt wird, wird die übergebene Funktion nicht mehr ersetzt. Was verursacht das und wie würde ich dieses Problem beheben? Ich habe ein Beispiel angebrachtNg-if on Direktiven mit Zwei-Wege-Bindungen, die Funktionen überschreiben

https://jsfiddle.net/dh7jt1zg/1/

<div class="parent" ng-controller="pCtrl"> 
     <h3>Parent - with ng-if</h3> 
     <div>{{parentHelloWorld()}}</div> 
     <child ng-if="testBool" rep-fun="parentHelloWorld"></child> 
    </div> 
    <br/> 
    <div class="parent" ng-controller="pCtrl2"> 
     <h3>Parent2 - without ng-if</h3> 
     <div>{{parentHelloWorld()}}</div> 
     <child rep-fun="parentHelloWorld"></child> 
    </div> 

Antwort

0

Verwenden ng-show statt ng-if. ng-if bewirkt, dass Element aus dem DOM entfernt wird.

0

Ich denke, Sie wären besser dran, einen Dienst zu erstellen, anstatt die Funktion im untergeordneten Controller zu ersetzen. Das scheint mir irgendwie unordentlich zu sein.

Persönlich würde ich einen Dienst verwenden, um die Funktion zu registrieren, und dann können Sie denselben Dienst von dem übergeordneten Controller verwenden, um es aufzurufen.