在我的角度应用程序中,我有一个带有隔离范围的指令。该指令在其作用域中获取一个字符串参数,因为该值可能在异步进程中由父作用域初始化 - 它还获得了父值在准备好使用时解析的承诺。
奇怪的是:当promise被解析时,指令范围中的值仍然是未定义的,尽管在父控制器中它有一个值。
请参阅此plunker以获取我的体验示例: https://plnkr.co/edit/WLILKaO95xWwU2RF29oX?p=preview
在控制器中:
$scope.defer = $q.defer();
// to simulate an async operation
$timeout(function(){
$scope.ctrlValue = 'Hi';
$scope.defer.resolve();
});
在指令中:
scope.valuePromise.then(function(){
alert(scope.value);
});
重要提示:如果我打包警告' $ timeout块中的代码行 - scope.value具有正确的值。当promise得到解决时,似乎angular没有运行摘要。
有什么想法吗?
答案 0 :(得分:1)
在指令中使用var app = angular.module('app', []);
app.controller('ctrl', function($scope, $q, $timeout) {
$scope.defer = $q.defer();
$timeout(function() {
$scope.ctrlValue = 'Hi';
$scope.defer.resolve();
});
});
app.directive('dir', function($timeout){
return {
restrict: 'E',
scope: {
value: '=',
valuePromise: '='
},
link: function(scope) {
scope.valuePromise.then(function() {
$timeout(function() {
alert(scope.value);
});
});
}
};
});
。需要一些时间将父作用域的更改应用于指令作用域。您试图在未更新时获取该值。
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="ctrl">
<h1>Hello Plunker!</h1>
<dir value="ctrlValue" value-promise="defer.promise"></dir>
</div>
</div>
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at mouseclik_fla::MainTimeline/frame1()