在我的角度應用程序中,我有一個隔離範圍指令。該指令在其作用域中獲取一個字符串參數,並且由於此值可能由異步過程中的父作用域初始化 - 它也會得到一個承諾,當該值準備好使用時,該承諾將由父代解決。解決承諾時角度摘要未運行
奇怪的是:當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);
});
重要提示:如果我換行'$ alert'代碼行在$ timeout超時 - scope.value具有正確的值。當承諾解決時,角度似乎沒有運行摘要。
任何想法?
使用'$適用()'爲您超時功能 –
你必須要麼使用$適用()或$消化()啓動角消化週期..沒有它的角將無法知道何時解決承諾。 – Dreamweaver
我知道$ apply會運行一個摘要,但我想避免這種形式的一些原因 - 尤其是因爲當有另一個摘要正在進行時它會拋出錯誤。它是否真的如此 - 承諾解決後沒有摘要? – user2717436