2016-02-28 19 views
10

Ho creato un componente che deve avere un riferimento all'oggetto per il quale è stato creato il componente. Non ho fatto funzionare e tutte le mie prove hanno fallito. Sotto, cerco di descrivere l'intenzione.Passare oggetto al componente

la definizione del componente sarebbe forse simile a questa:

angular 
    .module('myModule') 
    .component('myComponent', { 
     templateUrl: "template.html", 
     controller: [ 
      MyController 
     ], 
     bindings: { 
      myObject: '=' 
     } 
    }); 

function MyController(myObject) { 
    var vm = this; 

    vm.myObject = myObject; 
} 

In un servizio vorrei creare il mio oggetto come questo:

function createMyObject(args) { 
     var myObject = {some: data}; 

     myObject.ref = "<my-component myObject='{{myObject}}'></my-component>"; 
     return myObject; 
    } 

Domanda

Come posso passare i dati al tag componente angolare? Devo tornare alla direttiva di un componente per farlo funzionare?

Tutte le idee sono molto apprezzate. Grazie.

+0

Se la vostra intenzione è quella di manipolare il vostro DOM, allora sì, si dovrebbe utilizzare un [direttiva personalizzato] (https://docs.angularjs.org/guide/directive). –

+0

@ LJ.Wizard Non desidero modificare DOM. Di seguito ho pubblicato una soluzione. – zatziky

+0

che diamine è un MarkerController? è lo stesso di MyController? – Martian2049

risposta

7

Soluzione 1

Nel modello:

<my-component key='$ctrl.myObject'></my-component> 

in codice:

angular 
    .module('myModule') 
    .component('myComponent', { 
     templateUrl: "template.html", 
     controller: [ 
      'objectService' 
      MyController 
     ], 
     bindings: { 
      key: '=' // or key: '<' it depends on what binding you need 
     } 
    }); 

function MyController(myObject, objectService) { 
    var vm = this; 

    vm.myObject.whatever(); // myObject is assigned to 'this' automatically 
} 

Soluzione 2 - via associazione ai componenti

Componente:

angular 
.module('myModule') 
.component('myComponent', { 
    templateUrl: "template.html", 
    controller: [ 
     'objectService' 
     MyController 
    ], 
    bindings: { 
     key: '@' 
    } 
}); 
function MyController(myObject, objectService) { 
    var vm = this; 

    vm.myObject = objectService.find(vm.key); 
} 

Usage:

function createMyObject(args) { 
    var myObject = {key: ..., some: data}; 

    myObject.ref = "<my-component key='" + myObject.key + "'></my-component>"; 
    return myObject; 
} 
+0

Zatziky, Quindi non stai più tentando di passare l'oggetto? Piuttosto stai passando una stringa al componente? La mia comprensione è corretta? –

+0

@MichaelR È passato un po 'di tempo ma generalmente l'esempio nella domanda funziona ma con una leggera modifica. Invece di 'myObject = '{{myObject}}'' dovresti usare controller 'myObject = '$ ctrl.myObject''. La soluzione alternativa nella risposta è solo un hack. Ho modificato la risposta di conseguenza. – zatziky

+0

Nota che l'attributo chiave deve essere in kebab-case. Esempio: se vuoi che la tua chiave sia myProperty, allora l'attributo deve essere my-property. –

Problemi correlati