2016-02-09 13 views
11

Secondo lo the docs (in particolare, la tabella che confronta le direttive con i componenti), i componenti angolari consentono di richiedere altre direttive (o sono solo componenti?). Tuttavia, i componenti non hanno una funzione di collegamento, che potrebbe consentire l'accesso al controller richiesto. The source, contrariamente alla documentazione, sembra suggerire che non è possibile utilizzare 'require' durante la creazione dei componenti. Che è vero?Utilizzo di 'require' nel componente angolare

risposta

17

La fonte citata non è aggiornata. A partire dalla 1.5.0, i controller dei componenti can be required in altri componenti (lo stesso vale per le direttive).

Un esempio dalla guida shows the way how the components and directives should interact in 1.5 senza l'aiuto da link.

Quando require object and bindToController vengono utilizzati insieme, le istanze del controller necessarie vengono assegnate al controller corrente come proprietà.

Poiché ciò accade durante il collegamento della direttiva, i controller richiesti non sono disponibili nel costruttore del controller, ecco perché $onInit magic method è presente. Se esiste, it is executed right after adding required controllers a this.

Entrambi

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); 
     }; 
    } 
    } 
}); 

e

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); 
    }; 
    } 
}); 

stili di dichiarazione sono alla pari sotto il cofano e possono essere usati in modo intercambiabile in 1.5, e component è una concisa.