看到几个人有类似的问题,但通常的范围。$ apply对我不起作用($ digest已经在进行中)。今天敲我的头。
请在下面找到我的指令的简化但完整版本。
但我的视图未更新。发生什么事了?!
(function () {
'use strict';
angular
.module('myApp')
.directive('myDirective', myDirective);
function myDirective($rootScope, $localStorage, MyPromise, MyService) {
var linkFunction = function (scope, element, attributes) {
scope.myValue = null;
$rootScope.$on('someEvent', function (event, data) {
MyPromise().get({}, function (result) {
$localStorage.result = result;
scope.myValue = MyService.getFromLocalStorageAndReturnStuff();
console.log(scope.myValue);
});
});
initialize();
function initialize() {
scope.myValue = MyService.getFromLocalStorageAndReturnStuff();
}
};
return {
restrict: 'A',
transclude: true,
replace: true,
scope: {
someProperty: '=myProperty'
},
link: linkFunction,
templateUrl: 'myTemplate.html'
};
}
})();

{{myValue}}

答案 0 :(得分:0)
链接功能不会观察模型更改,因此请在applyAsync函数
中设置变量scope.$applyAsync(function(){
//set here
});
答案 1 :(得分:0)
为我工作的是我有一个外部范围属性(scope.someProperty),当我的事件发生时,它也会发生变化。
观看它确实会改变视图中反映的范围。
我知道如果真的必须对某些事件作出反应,这不是一个完美的解决方案,但我想提供我的解决方案,以防它可能对其他人有帮助。
如果有人可以回答真正的问题,我很乐意接受他的回答。
(function () {
'use strict';
angular
.module('myApp')
.directive('myDirective', myDirective);
function myDirective($rootScope, $localStorage, MyPromise, MyService) {
var linkFunction = function (scope, element, attributes) {
scope.myValue = null;
scope.$watch('someProperty', function(newVal){
if(newVal!==null){
MyPromise().get({}, function (result) {
$localStorage.result = result;
scope.myValue = MyService.getFromLocalStorageAndReturnStuff();
});
}
});
initialize();
function initialize() {
}
};
return {
restrict: 'A',
transclude: true,
replace: true,
scope: {
someProperty: '=myProperty'
},
link: linkFunction,
templateUrl: 'myTemplate.html'
};
}
})();