2014-07-09 35 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

没有工作:( –