次のディレクティブがあります。
MyApp.directive('myFilter', ['$filter','$rootScope',
function($filter, $rootScope)
{
var dir = {};
dir.restrict = 'E';
dir.templateUrl = 'views/myFilter.html';
dir.replace = true;
dir.scope =
{
name: '@',
model: '=',
};
dir.link = function(scope,el,attrs)
{
//stuff here
}
return dir;
}]);
これを呼び出す方法は次のとおりです。
<my-filter model="someField" name="abcd" />
ディレクティブが最初に初期化されるとき、someField
は空です。その後、ajax を介して取得され、その値が入力されます。
someField
質問は、 の値が更新されるのをどのように監視できますか? リンクメソッドからこれを行うと:
scope.$watch(scope.model, function()
{
console.log( "changed, new val: ", scope.model );
}
これは、ディレクティブを初期化するときに 1 回だけ呼び出され、値は空になります。値が (から) ajax を介して取得される場合$http.get
、このウォッチ関数は再度呼び出されません。ただし、表示しているページの他の部分では、{{someField}}
ajax リクエストがフェッチされると、その値は更新されます。$scope.apply()
したがって、問題はajaxリクエストの後に行うことに関係しているとは思いません。
Edit: someField
コントローラーに割り当てられます。コードは次のとおりです。
MyApp.controller('myCtrl',
['$scope', '$rootScope', '$routeParams',
'ajax', '$filter',
function($scope, $rootScope, $routeParams, ajax, $filter)
{
var userId = parseInt( $routeParams.userId );
$scope.loaded = false;
$scope.someField = ""; //initalize with empty value
var load = function(data)
{
$scope.loaded = true;
$scope.someField = data.someField;
};
ajax.getUser(userId).success(load);
}
]);
メソッドajax.getUser()
は aを実行し、$http.get()
その を返しますpromise
。上記のコードload
では、 の値を設定するメソッドが呼び出されますsomeField
。