2016-02-28 12 views
10

पर ऑब्जेक्ट पास करें मैंने एक घटक बनाया है जिसके लिए उस ऑब्जेक्ट का संदर्भ होना आवश्यक है जिसके लिए घटक बनाया गया था। मैंने काम नहीं किया और मेरे सभी परीक्षण विफल हो गए। नीचे, मैं इरादे का वर्णन करने की कोशिश करता हूं।घटक को

घटक परिभाषा शायद इस प्रकार दिखाई देगा:

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

function MyController(myObject) { 
    var vm = this; 

    vm.myObject = myObject; 
} 

एक सेवा में मैं इस तरह मेरी वस्तु बनाने के लिए करना चाहते हैं:

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

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

प्रश्न

मैं कैसे कर सकता है कोणीय घटक टैग को डेटा पास करें? क्या मुझे इसे काम करने के लिए एक घटक निर्देश पर वापस जाना है?

किसी भी विचार की बहुत सराहना की जाती है। धन्यवाद।

+0

आपका इरादा अपने डोम हेरफेर करने के लिए है, तो हाँ, आप एक [कस्टम निर्देश] (का उपयोग करते हुए किया जाना चाहिए https://docs.angularjs.org/guide/directive)। –

+0

@ एलजे। जादूगर मैं डोम में हेरफेर नहीं करना चाहता हूं। नीचे मैंने एक समाधान पोस्ट किया। – zatziky

+0

क्या मार्क मार्कर नियंत्रक है? क्या यह MyController के समान है? – Martian2049

उत्तर

7

समाधान 1

अपने टेम्पलेट में:

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

समाधान 2 - घटक बाइंडिंग

घटक के माध्यम से:

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

उपयोग:

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

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

ज़त्ज़िकी, तो आप अब ऑब्जेक्ट पास करने का प्रयास नहीं कर रहे हैं? इसके बजाय आप घटक के लिए एक स्ट्रिंग गुजर रहे हैं? क्या मेरी समझ सही है? –

+0

@MichaelR कुछ समय हो गया है लेकिन आम तौर पर प्रश्न में उदाहरण काम करता है लेकिन मामूली संशोधन के साथ। 'MyObject = '{{myObject}}' के बजाय आप नियंत्रक 'myObject =' $ ctrl.myObject'' का उपयोग करेंगे। जवाब में कामकाज सिर्फ एक हैक है। मैंने तदनुसार जवाब संशोधित किया है। – zatziky

+0

ध्यान दें कि कुंजी विशेषता कबाब-केस में होनी चाहिए। उदाहरण: यदि आप चाहते हैं कि आपकी कुंजी मेरी प्रॉपर्टी हो, तो विशेषता मेरी संपत्ति होनी चाहिए। –