私AngularJSは、更新機能を親スコープに単一の値をバインドし、呼び出すためにFaveDirective
ニーズを先行入力するとき、その値の変更:AngularJSのディレクティブの親スコープに値を手動で伝播するにはどうすればよいですか?
親HTML:
<div class="parent-controller-scope ng-scope">
<my-fave-picker favorite="parent.favorite" on-change="parent.update()">
</div>
フェイブピッカーディレクティブテンプレート:
<input
type="text"
ng-model="vm.favorite"
typeahead-on-select="vm.onChange()"
ng-init="vm.loadTypeaheadValues()"
placeholder="Pick your favorite Swift"
uib-typeahead="name for name in ::vm.TypeaheadValues | filter:$viewValue"
class="form-control">
フェイブピッカーディレクティブコード:
(function (angular, _) {
'use strict';
angular
.module('favorite')
.directive('MyFavePicker', function() {
return {
restrict: 'E',
templateUrl: 'fave-picker-template.html',
scope: {
favorite: '=',
onChange: '&'
},
controllerAs: 'vm',
bindToController: true,
controller: 'FavePickerController'
};
})
.controller('FavePickerController', function() {
// etc.
});
}(angular, _));
これはほぼ正常に動作します。先行入力がコミットされると、目的の親スコープのupdate()
が呼び出されます。問題は、の前にの最新の値favorite
が親スコープに伝播することです。言い換えると、先行入力が可能な値["Taylor Swift", "Jonathan Swift"]
を持っている場合、私は「テイ」と入力して、その後、一度にtypeahead-on-select
コールバックが実行され、ドロップダウンリストから値を選択するためにEnterキーを押し、私は次の値があります。
vm.favorite = "Taylor Swift"
parent.favorite = "Tay"
を
したがって、parent.update()
関数は、parent.favorite
(「Taylor Swift」の代わりに「Tay」)の間違った値で動作します。
私はいくつかの悪い方法を考えることができますが、vm.favorite
への変更はparent.favorite()
を呼び出す前に、親スコープに戻って伝播されますように、これを行うための正しい方法は何ですか?
次のものが私の状況では不可能であることに注意してください:
- 親スコープを継承する代わりにタイムアウトを設定
update
(on-change="parent.update(favorite)"
) - への引数として分離株範囲
favorite
を渡すを使用してdir.onChange()
呼び出し前parent.update()
参照してください。どちらですか? – DanteTheSmith
示されているコードによると、AngularJS – lealceldeiro
のようです。混乱して申し訳ありません - AngularJS(1.x)です。質問が更新されました。 – Sasgorilla