2016-02-09 52 views
11

Według the docs (w szczególności tabela porównująca dyrektywy z komponentami) komponenty kątowe umożliwiają zastosowanie innych dyrektyw (lub czy są to tylko komponenty?). Jednak komponenty nie mają funkcji łącza, która mogłaby dać dostęp do wymaganego kontrolera. The source, w przeciwieństwie do dokumentacji, wydaje się sugerować, że nie można używać "wymagać" podczas tworzenia komponentów. Która prawda?"Wymagaj" w składniku kątowym

Odpowiedz

17

Cytowane źródło jest nieaktualne. Od wersji 1.5.0 kontrolery komponentów can be required w innych komponentach (to samo dotyczy dyrektyw).

Przykład z przewodnika shows the way how the components and directives should interact w wersji 1.5 bez pomocy z link.

Gdy używane są , wymagane instancje kontrolera są przypisywane do kontrolera prądu jako właściwości.

Ponieważ dzieje się to podczas łączenia linków, wymagane kontrolery nie są dostępne w konstruktorze kontrolera, dlatego istnieje tam $onInit magic method. Jeśli istnieje, it is executed right after adding required controllers do this.

Oba

app.directive('someDirective', function() { 
    return { 
    scope: {}, 
    bindToController: {}, 
    controllerAs: 'someDirective', 
    require: { 
     anotherDirective: '^anotherDirective' 
    }, 
    controller: function ($scope) { 
     console.log("You don't see me", this.anotherDirective); 

     this.$onInit = function() { 
     console.log("Now you do", this.anotherDirective); 
     }; 
    } 
    } 
}); 

i

app.component('someComponent', { 
    controllerAs: 'someComponent', 
    require: { 
    anotherDirective: '^anotherDirective' 
    }, 
    controller: function ($scope) { 
    console.log("You don't see me", this.anotherDirective); 

    this.$onInit = function() { 
     console.log("Now you do", this.anotherDirective); 
    }; 
    } 
}); 

style deklaracji są na równi pod maską i mogą być używane zamiennie w 1,5 i component jest zwięzły jeden.