2014-07-09 33 views
0

我有一個從服務器檢索數據的異步函數,我有一個指令應該顯示異步函數檢索的數據。如何阻止執行指令直到指定時間?

我想要做的是在我的指令中放置一個假的ng-show,假設除非將ng-show放入true,否則指令將不會加載。 在我的異步函數檢索數據之前,ng-show將保持爲false。

事情是這是行不通的,該指令將加載,無論我是否放置一個ng顯示或不 - 其他任何想法?

這是我在代碼中曾嘗試:

JS:

getFile.then(function (result) { 
         $scope.show = true; 
         Utilities.safeApply($scope); 
        }) 

HTML:

section class="list file-list group" ng-show="show" view-mode="assets"> 
    <file file="model.file"></file> 
</section> 

指令:

.directive('file', ['$rootScope', '$compile', function($rootScope, $compile) { 
     return { 
      restrict: 'E', 
      replace: true, 
      templateUrl: 'file.html', 
      scope: { 
       show: '=' 
      }, 
      controller: function($scope) { 
       //do stuff here once async function finished 
      } 
+0

這絕對是可行的,但在沒有查看代碼的情況下幫助你是有點困難的。請更新問題以顯示您所嘗試的內容(並且,如果可以的話,請準備好一個重擊者)。 – link

+0

添加了一些源代碼 –

回答

1

ngShow和ngHide僅僅顯示和隱藏內容,他們不會有條件地添加或從頁面中刪除它。如果你真的想要這樣的行爲,看看ngIf

然而,我認爲你的問題會更好地解決在你的指令中設置一個監視器,當內容準備就緒時就會動作。這是解決問題的「更有角度」的方式,因爲它依賴於數據綁定。

.directive('file', ['$rootScope', '$compile', function($rootScope, $compile) { 
    return { 
     restrict: 'E', 
     replace: true, 
     templateUrl: 'file.html', 
     scope: { 
      file: '=', // YOU DIDN'T HAVE THIS YET 
     }, 
     controller: function($scope) { 
      $scope.$watch('file', function (newValue) { 
       if (!newValue) { return; } 
       // do async code here. $scope.file will be defined 
      }; 
     } 

由於其他海報提及,你可能調用$範圍。$適用()收到您的Ajax調用的結果之後觸發摘要週期。這取決於您的getFile方法的外觀。如果它使用Angular的核心服務之一,如$http,則可能不需要手動混淆摘要週期。

+0

實際上添加了一個手錶的伎倆,但我想知道,放置文件='='不內部已經創建一個手錶??? –

+0

不,它不' file:'='僅僅定義了你的指令的隔離範圍內的'file'的含義。 – Benmj

0

你有沒有打過電話$範圍$ apply()在結尾處(或者在後面) r)你的功能?這在類似情況下適用於我。我認爲這與從angular之外更新$ scope有關。

免責聲明:我不知道這是很好的做法,但我一直被迫使用了幾次與異步功能工作,它做什麼,我想要它做的

+0

沒有工作:( –