2017-08-16 5 views
1

Ich werde versuchen, meine Problembeschreibung so weit wie möglich hier zu verkürzen.Problem auf AngularJS directive link und ngHref

Ich habe eine Richtlinie, die

scope: false 
restrict: "A" 
link: function (scope, element, attributes) { 
    ... 
} 

und den Eingangsparameter element sieht wie folgt aussieht wie folgt

<div class="tab-container" my-directive> 
    <div ng-repeat="tab in $ctrl.tabs" class="tab"> 
    <a ng-href="{{tab.name}}"> 
    </div> 
</div> 

ng-repeat wurde „gelöst“, nicht sicher, ob das der richtige Begriff, aber ng-href wurde nicht gelöst, das heißt, {{tab.name}} wurde nicht auf den Wert, den ich brauche, gedreht.

Ich frage mich, wie ich diese Direktive zur Ausführung von Link sagen kann, nachdem ng-href zuerst gelöst wurde.

Ich lese etwas über require Eigenschaft, aber es scheint nur controller zu behandeln.

+0

anrufen kann, wenn ich Ihre Situation neu, ng-Wiederholung ist nicht noch kompiliert. Gibt es Code, der das beeinflussen könnte, den du nicht teilst? Siehe fiddle: http://jsbin.com/yiqukipeku/edit?html,js,console,output – sniels

+0

@sniels ja, ich habe etwas verpasst. Ich aktualisierte Ihre jsbin http://jsbin.com/pelaxebesi/1/edit?html,js,console,output – starcorn

+0

Ich kann dort mit einer Zeitüberschreitung kommen, aber ich denke nicht, dass das eine gute Lösung ist. Was genau willst du erreichen? Vielleicht gibt es einen anderen Weg, es zu lösen. – sniels

Antwort

0

Ich frage mich, wie kann ich diese Anweisung zu führen, Link, nachdem ng-href hat zuerst gelöst wurde.

Sie können $broadcast Ereignis von Ihrem Controller zu Direktive senden.

$rootScope.$broadcast('onHrefReady'); 

und in der Richtlinie:

link : function (scope, element, attributes) { 
     scope.$on("onHrefReady", function (event, args) { 
      // do your stuff 
     }); 
    } 

link nach dem Rendern genannt wird, so dass Sie link Inhalt nach bekam Benachrichtigung von der Steuerung

+0

unsicher, wie ich es in meinem Fall anwenden kann. Ich habe es versucht, indem ich jsbin folgte. Aber es registriert nichts gesendetes http://jsbin.com/honiqatuwi/edit?html,js,console,output – starcorn

+0

@starcorn es geschieht, weil Sie $ broadcast aufrufen, wenn Richtlinie immer noch nicht gerendert wird. Stellen Sie ein Timeout von 10 ms ein, um das richtige Verhalten zu simulieren. http://jsbin.com/fizasuchewi/1/edit?html,js,console,output –

Verwandte Themen