2016-08-30 44 views
0

我正在更新$範圍上的一個按鈕單擊,基本上使一個Restangular調用,獲取數據並填充$ scope變量。防止按鈕點擊,而摘要循環運行在角

但是,如果用戶在運行$ digest循環時多次單擊該按鈕,$ scope將被更新爲重複值。

我很確定這是一個常見問題。不過,我還沒有遇到過一個解決方案,我正在尋找。

人們建議使用$timeout,但它似乎反邏輯。

我寧願在$digest週期運行時關閉按鈕。

這是我到目前爲止所實施的。

$scope.names = []; 
$scope.disableButton = true; 
FetchNames.getAllNames().then(function(result){ 
    result.data.forEach(function(name){ 
    $scope.names.push(name); 
    }); 
$scope.disableButton = false; 
}); 

在這裏,當承諾得到解決時,按鈕被禁用。 但這並不能解決我的問題。我需要檢查摘要週期何時完成。

+0

這將對你有用,我認爲是這樣http://stackoverflow.com/questions/21138388 /角JS-識別-的消化完成事件和移除,從-URL-在棱角 –

+0

我不明白爲什麼'$ timeout'是對子級「反邏輯」,因爲它等待摘要循環在觸發回調之前完成。 – cbass

+0

cbass,它不會再次運行摘要循環嗎? –

回答

-1

使用NG-禁用內置指令禁用按鈕時,用戶點擊它。要實現這一點,只需將變量設置爲true即可。看看下面

<button ng-click="btn1=true, yourFunction()" ng-disabled='btn1'> 

的代碼在你的控制器,可就是這樣

$scope.btn1= false; 
    $scope.yourFunction= function(){ 
     $scope.names = []; 
     FetchNames.getAllNames().then(function(result){ 
     result.data.forEach(function(name){ 
      $scope.names.push(name); 
     }); 
     $scope.disableButton = false; 
    }; 
+0

這並不能解決再次啓動摘要循環的問題。 –

+1

我發現這個[鏈接](https://www.thinkful.com/projects/understanding-the-digest-cycle-528/)對您的摘要循環很有用。 希望它能爲你效勞! –

+0

如果你喜歡它,你可以請刪除反對票和贊成票。 –

0

試試這個:

$scope.names = []; 
$scope.disableButton = true; 
FetchNames.getAllNames().then(function(result){ 
    // if in digest; reuturn 
    if($scope.$$phase || $scope.$root.$$phase){return} 
    result.data.forEach(function(name){ 
    $scope.names.push(name); 
    }); 
$scope.disableButton = false; 
});