2016-02-28 7 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

あなたの意図は、あなたのDOMを操作する場合は、[はい、あなたは[カスタムディレクティブ]を使用する必要があります(https://docs.angularjs.org/guide/directive )。 –

+0

@ LJ.Wizard私はDOMを操作したくありません。以下、私は解決策を掲示した。 – zatziky

+0

MarkerControllerは何ですか?それは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

Zatziky、もうオブジェクトを渡そうとしていないのですか?むしろ文字列をコンポーネントに渡していますか?私の理解は正しいのですか? –

+0

@MichaelRいくつかのことがありましたが、一般的に問題の例が少し修正されています。 myObject = '{{myObject}}' 'の代わりに、コントローラ 'myObject =' $ ctrl.myObject 'を使用します。答えの回避策はちょうどハックです。私はそれに応じて答えを修正しました。 – zatziky

+0

key属性はkebab-caseでなければならないことに注意してください。例:キーをmyPropertyにしたい場合、属性はmy-propertyでなければなりません。 –

関連する問題