次のような HTML を書きたいとしましょう。
<div my-directive my-start="topModel.start" my-end="topModel.end">
my-directive
次のように、で他のディレクティブを呼び出すテンプレートがありますngModel
。
<div>
<input ng-model="myStart" />
<input ng-model="myEnd" />
</div>
内部入力を透過的に更新したいと思いtopModel
ます。ng-model
属性にドットがなく、値がローカル スコープで設定されているため、この方法では機能しません。
私がこれまでに見つけた唯一の方法は、両方のモデルを見てmy-directive
翻訳することですが、それは恐ろしい忌まわしさです.
restrict: 'A',
scope: {
myStart: '=',
myEnd: '='
},
link: function(scope, el, attrs) {
scope.model = { start: scope.myStart, end: scope.myEnd };
scope.$watch("model.start", function(n) {
scope.myStart = n;
});
scope.$watch("model.end", function(n) {
scope.myEnd = n;
});
scope.$watch("myStart", function(n) {
scope.model.start = n;
});
scope.$watch("myEnd", function(n) {
scope.model.end = n;
});
}
この手動の同期をすべて行わずに、バインドを 内部ディレクティブに渡すにはどうすればよいですか?my-directive
編集: http://plnkr.co/edit/ppzVd7?p=previewで plunker を参照してください- これは実際に動作します
EDIT2 : http://plnkr.co/edit/Nccpqn?p=previewで別のものを参照してください- これは、ドットなしの「直接アクセス」がどのように機能しないかを示して$watches
います。