0

I Verwenden Sie die Anweisung eckige-ui-bootsrap-Registerkarten, um die Registerkarten zu erstellen. Aber wenn ich console.log auf jedem Controller und Link-Funktion, ist die Initialisierungsreihenfolge nicht korrekt.Direktive nicht korrekt initialisieren

ich erwarte

outer - controller 
Inner - Controller 
Inner - Link 
Inner - Controller 
Inner - Link 
Inner - Controller 
Inner - Link 
Inner - Controller 
Inner - Link 
outer - Link 

Das Ergebnis

outer - controller 
outer - Link 
Inner - Controller 
Inner - Link 
Inner - Controller 
Inner - Link 
Inner - Controller 
Inner - Link 
Inner - Controller 
Inner - Link 

Wie Sie die äußeree Richtlinie hat die Verbindung mit dem Controller zur gleichen Zeit init sehen können, nicht die Verknüpfung nach dem inneren Direktive wurde initialisiert.

Gehen Sie zur plunker und überprüfen Sie die Konsole.

Antwort

1

Setzen Sie Ihre Link-Funktion in $ Timeout-Dienst. Siehe die plunker

// UPD: Add $timeout service 
 
.directive('uibTabset', function($timeout) { 
 
    return { 
 
    transclude: true, 
 
    replace: true, 
 
    scope: {}, 
 
    bindToController: { 
 
     active: '=?', 
 
     type: '@' 
 
    }, 
 
    controller: 'UibTabsetController', 
 
    controllerAs: 'tabset', 
 
    templateUrl: function(element, attrs) { 
 
     return attrs.templateUrl || 'uib/template/tabs/tabset.html'; 
 
    }, 
 
    link: function(scope, element, attrs) { 
 
     // UPD: put link-function in $timeout 
 
     $timeout(function() { 
 
     console.log("outer - Link"); 
 
     
 
     scope.vertical = angular.isDefined(attrs.vertical) ? 
 
      scope.$parent.$eval(attrs.vertical) : false; 
 
     scope.justified = angular.isDefined(attrs.justified) ? 
 
      scope.$parent.$eval(attrs.justified) : false; 
 
     if (angular.isUndefined(attrs.active)) { 
 
      scope.active = 0; 
 
     } 
 
     }); 
 
     // END UPD 
 
    } 
 
    }; 
 
})

+0

Das Timeout würde funktionieren, aber gibt es einen Weg sauberer als Timeout? Und warum sollte das passieren? –

0

Ich habe das Problem gefunden. Es ist die ng-Wiederholung, die dieses Problem verursacht. Ich werde jedoch eine andere Frage zu diesem Problem stellen.