2015-12-14 10 views
9

Sto usando il componente v1.5, che è essenzialmente (a mio avviso estende) un wrapper per le direttive best practice.Come accedere agli attributi all'interno del componente v1.5 di Angularjs?

Maggiori informazioni sulla versione 1.5 del componente può essere trovato qui: http://toddmotto.com/exploring-the-angular-1-5-component-method/

Ho il seguente:

<span>Correclty showing: {{ data.type }}</span> 
<book class="details" type="data.type"></book> 

Ed è definizione del componente:

angular 
.module('app') 
.component('book', { 
    bindings: { 
     type: '=' 
    }, 
    template: function($element, $attrs) { 
     // Have tried A): 
     // console.log($attrs.type); // <- undefined 

     // And B): 
     $attrs.$observe('type', function(value) { 
      console.log(value); // <- undefined 
     }); 

     // But.. C): 
     return "This works though {{ book.type }}"; // <- renders 
    } 
}); 

Sia A) e B) variazioni restituiscono undefined. C) viene visualizzato correttamente.

C'è un modo per accedere agli attributi all'interno della funzione modello prima di restituire la stringa del modello?

risposta

13

In 1.5, templateUrl ora assume iniettabili secondo i documenti: https://docs.angularjs.org/guide/component. Se si utilizza ng-srict-di si otterrà un errore a meno che non si specificano gli iniettabili .... Sto usando ng-annotate per salvare il mal di testa e mantenere pulito il codice. Ecco un esempio (a macchina):

import IRootElementService = angular.IRootElementService; 
    import IAttributes = angular.IAttributes; 

    angular.module('app').component('book', { 

     /*@ngInject*/ 
     templateUrl($element:IRootElementService, $attrs:IAttributes) { 
      // access to the $element or $attrs injectables 
     } 

    }); 

o senza ng-annotate in JS vaniglia:

angular.module('app').component('book', {  
     templateUrl: ['$element', '$attrs', function($element, $attrs) { 
      // access to the $element or $attrs injectables 
     }], 
    }); 
+0

sto vedendo ng-strict-di, ng-annotate, e poi una molto interessante @ ngInject? Puoi chiarire in che modo un attr può essere un iniettabile? Sto cercando una risposta che suggerisce come creare templateUrl in base ad altre dipendenze. – iJames

+0

È nei documenti Angular 1.5, nell'architettura del componente, $ element e $ attrs sono iniettabili. Vedi la guida del componente collegata nella risposta per maggiori dettagli. – Jeff

+1

@Jeff è necessario iniettare il servizio $ element? Ho provato senza iniettarlo e sembra funzionare comunque. – user449689

Problemi correlati