2017-02-13 9 views
1

コンポーネントを使用するコントローラのスコープでプロパティの値を取得できないような問題が発生しています。プロパティとして私は期待された結果を得るが、$ctrl.valのような何かをしようとすると私の有能な内の私に不確定を与えるだろうが、3は正しい結果を与えるでしょう。誰がなぜこれが起こっているのか知っていますか?角の1コンポーネントのバインディングが親コントローラの変数を評価しない

私はこのようなコンポーネント持っている:

function RatingController() { 
    let vm = this 
    this.$onInit = function() { 
     console.log("rating: ", vm.rating) 
    } 
} 

export default { 
    bindings: { 
     rating: '=' 
    }, 
    controller: RatingController, 
    template: ` 
    <span>{{ $ctrl.rating }}</span 
    `, 
} 

をそして私はこのようにそれを初期化:上記

<div ng-controller="MainCtrl as main"> 
    <star-rating rating="main.rating"></star-rating> 
</div> 

は常にしかし、この意志をやって、私のコンポーネントで未定義としての評価を持っています

:期待される結果に

<div ng-controller="MainCtrl as main"> 
    <star-rating rating="3"></star-rating> 
</div> 

MainCtrlを与えます

export default function CakeController(requestCakes, $routeParams) { 
    let vm = this 
    requestCakes.getOne($routeParams.id).then((res) => { 
     //compose objects together 

     vm = Object.assign(vm, res.data) 
    }) 
} 
+0

'MainCtrl'コードを表示できますか? –

+0

@BartekFryzowicz私は上記にMainCtrlコードを追加しました。評価プロパティは、約束からの戻り値の一部として設定されています。今、私は問題が、その動作を説明する約束が返される前にコンポーネントが初期化されている可能性があると考えています。新しいデータが利用可能になったら、コンポーネントを更新する方法はありますか? –

答えて

1

コンポーネントに間違ったプロパティをバインドします。あなたは、コンポーネントの設定にratingをバインドしようとするが、あなたのコンポーネントの属性は、コンポーネントが(非同期的に自分のメインコントローラの負荷データを)初期化されるとき

main.rating値がまだ定義されていないheartrating

回答アップデートと呼ばれています。 $onInitの代わりに$onChangesフックを使用してください。一方向バインディングが更新されるたびに(docs)、コンポーネントの使用時には一般的な2ウェイデータバインディングは推奨されないため、$onChangesフックが呼び出されるため、一方向データバインディング(=の代わりに<を使用する必要があります)

+0

Bartekを見ていただきありがとうございました。実際には実際のコードには反映されていませんでした。私は質問をするためにここにコードを夢中にしたときに私が入れた間違いでした。 –

+0

この問題を解決するのに役立ちました完全性のために、バインディングは '$ onChangees 'です。あなたは' $ onChange'として型を与えました。 –

+0

素晴らしい、私は助けることができてうれしいです。あなたが正しいというフック名については、それはちょうどタイプミスであった。 –

関連する問題