2016-02-28 26 views
10

Bileşenin oluşturulduğu nesneye başvurması gereken bir bileşen oluşturdum. Çalışmaya gelmedim ve bütün denemeler başarısız oldu. Aşağıda, niyetini açıklamaya çalışıyorum.Nesneyi, bileşene geçirme

bileşen tanım belki bu şekilde görünecektir:

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

function MyController(myObject) { 
    var vm = this; 

    vm.myObject = myObject; 
} 

bir hizmetle Bu gibi benim nesne oluşturmak istiyorum:

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

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

Soru

Ben nasıl verileri açısal bileşen etiketine geçir? Çalışması için bir bileşen direktifine geri dönmem gerekiyor mu?

Fikirler büyük beğeni topluyor. Teşekkür ederim.

+0

niyetinizi sizin DOM işlemek için ise, o zaman evet, bir [Özel yönergesi] (kullanarak olmalıdır https://docs.angularjs.org/guide/directive). –

+0

@ LJ.Wizard DOM'ı değiştirmek istemiyorum. Aşağıda bir çözüm yolladım. – zatziky

+0

heck bir MarkerController nedir? MyController ile aynı mı? – Martian2049

cevap

7

Çözüm Şablonunuzda 1

:

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

:

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 
} 

Çözüm 2 - Bileşen Bağlar

Bileşen yoluyla:

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

Kullanımı:

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

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

Zatziky, Yani artık nesneyi geçmeye çalışmıyorsunuz? Aksine, bileşene bir dize mi geçiyorsun? Anlayışım doğru mu? –

+0

@MichaelR Biraz zaman geçti ama genel olarak sorudaki örnek çalışıyor ancak küçük bir değişiklik yapıyor. MyObject = '{{myObject}} yerine '' myObject =' $ ctrl.myObject '' kontrolörünü kullanırdınız. Cevaptaki çözüm sadece bir kesintidir. Cevabını buna göre değiştirdim. – zatziky

+0

Anahtar özellik kebap durumunda olması gerektiğini unutmayın. Örnek: Anahtarınızın myProperty olmasını istiyorsanız, öznitelik benim mülküm olmalıdır. –