Cli*_*ote 39 javascript angularjs
我有以下指令:
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;
}]);
Run Code Online (Sandbox Code Playgroud)
这是我如何调用它:
<my-filter model="someField" name="abcd" />
Run Code Online (Sandbox Code Playgroud)
当指令首次初始化时,它someField是空的.稍后,它通过ajax检索,并填入其值.
问题是,我该如何看待someField要更新的价值?当我从链接方法执行此操作时:
scope.$watch(scope.model, function()
{
console.log( "changed, new val: ", scope.model );
}
Run Code Online (Sandbox Code Playgroud)
这只在指令初始化时被调用一次,然后该值为空.当通过ajax(from $http.get)检索值时,不会再次调用此监视功能.但是,在我正在显示的页面的其他部分中{{someField}},该值在获取ajax请求时会更新.所以我不认为问题与$scope.apply()在ajax请求之后做的有关.
编辑: 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);
}
]);
Run Code Online (Sandbox Code Playgroud)
该方法ajax.getUser()执行a $http.get()并返回其promise.在上面的代码中,load调用方法来设置值someField.
Mic*_*ord 92
$watch期望一个表达式可以是函数或字符串.所以,如果你改成它,它会起作用
scope.$watch('model', function() { ... });
Run Code Online (Sandbox Code Playgroud)
要么
scope.$watch(function() { return scope.model; }, function() { ... });
Run Code Online (Sandbox Code Playgroud)
看看这个jsFiddle.
| 归档时间: |
|
| 查看次数: |
54427 次 |
| 最近记录: |