最近我注意到更改为一些 Angular 提供程序对象或我自己的外部范围(在指令之外,在控制器中)需要将代码包装在 scope.apply() 中。
谁能详细说明这种相当奇怪的行为行为?
Apply 是 Angular 识别在其自身范围之外发生的事情(不同的库等)的一种方式,Angular 指令绝对不属于该定义。
示例代码:
app.directive('socialAuth', function(utils, authService, $location){
return{
restrict: 'A',
scope: false,
link: function(scope, elem, attrs){
elem.bind('click', function(){
utils.cleanSocialSearch();
if(attrs.checkbox){
scope.$apply(function(){
scope.model.personalShare[attrs.network] = true;
$location.search('presonalShare', '1');//those 2 do nothing outside of the $apply function
});
}
var callback = encodeURIComponent(window.location.href);
var loginUrl = utils.getBaseUrl() + '/social/login/' + attrs.network + '?success_url=' + callback;
location.href = loginUrl;
});
}
}
});