angular $viewValue
ディレクティブ内からのコントローラーの。
フィドル: http://jsfiddle.net/dkrotts/TfTr5/5/
function foo($scope, $timeout) {
$scope.bar = "Lorem ipsum";
$timeout(function() {
$scope.bar = "Dolor sit amet";
}, 2000);
}
myApp.directive('myDirective', function() {
return {
restrict: 'A',
require: '?ngModel',
link: function (scope, element, attrs, controller) {
scope.$watch(controller.$viewValue, function() {
console.log("Changed to " + controller.$viewValue);
});
}
}
});
現状では、$ watch関数は、コントローラー内部から2秒後に行われたモデル変更をキャッチしていません。私は何が欠けていますか?
追加したい:1.2.xでは、分離されたスコープで、上記は機能しません。 http://jsfiddle.net/TfTr5/23/
私が思いついた回避策は、$ watchも関数を受け入れるという事実を使用していたため、それを使用してコントローラーにアクセスできます。
scope.$watch(
function(){return controller.$viewValue},
function(newVal, oldVal){
//code
}
)
作業フィドル: http://jsfiddle.net/TfTr5/24/
誰か他の人がいるなら、喜んで歓迎します!
分離スコープ内の値をバインドする場合、2つの方法があります。分離スコープがない場合でも使用できる最初の方法は次のとおりです。
1)$attrs.any_attribute
を使用してバインドします(ウォッチで設定)
2)2 way binding( '=')メソッドを使用し、リスナーに設定します
あなたがここで例でもっと欲しいなら素晴らしい記事です
モデル値のデバウンスが必要な場合は、ng-model-optionのデバウンス設定に言及する価値があります。
<input type="text" ng-model-options="{ debounce: 1000 }" ng-model="search"/>
たとえば、この時計は変更後1000 msでトリガーされ、新しい変更でリセットされます。
scope.$watch(attrs.ngModel, function(newValue) { });