私はAngular 1.5 のコンポーネントを使用して、その一方向バインディングの利点を得たいと考えていました: <hero-detail hero="ctrl.hero" save="ctrl.save(hero)"></hero-detail>
. しかし、Todd Motto が彼のブログ ( Todd Motto's blog: One-way data-binding in Angular 1.5 ) で指摘しているように、プリミティブに対してのみ適切に機能します。したがって、プリミティブをバインドする必要がありました。
<hero-detail
name="ctrl.hero.name"
id="ctrl.hero.id"
save="ctrl.save(ctrl.hero)"
></hero-detail>
コンポーネントの次は、$onInit
オンフックで、hero
プリミティブからオブジェクトを作成します。
HeroDetailController.prototype.$onInit = function(){
this.hero = {
name: this.name,
id: this.id
}
console.log('OnInit called');
}
ユーザーが保存をクリックすると、指定された関数が呼び出されます。奇妙な部分は、ユーザーがコンポーネント内でヒーローの名前を変更して保存をクリックすると、親からバインドされた関数が呼び出されたときに、コンポーネントからの変更がないことhero-detail
です。私の問題を示す plunker を作成しました: Plunk which shows problem with children/parent output binding in Angular 1.5 - 開発者コンソールを開いて [名前の設定...] をクリックし、[保存] をクリックすると、console.log
s が表示されます。それからhero-detail
Spawn2ですが、親コンテキスト(サービスとの会話などのロジックがあるべき場所$http
)では、まだ古い値がありますSpawn
。何か不足していますか?Angular docsのコードは、私のコードのように見えます:
<button ng-click="$ctrl.onDelete({hero: $ctrl.hero})">Delete</button>
何が起こっているのかわかりません。この問題に対処するために私を助けてくれてありがとう。PS Plunk のバージョンに問題がありましたが、今はすべて問題ありません。ブラウザーの開発者コンソールで、更新に関する問題を確認できます。