angularjs - 延迟 Angular 指令

标签 angularjs directive

我有一个由自定义 AJS 指令使用的通用 AJS 服务。
我需要保留我的指令,直到服务中的 promise 得到解决。 据我所知,这是通过 directivecontroller 完成的,但除了路由之外,我没有看到任何示例。

如何在服务 promise 得到解决之前延迟我的指令?

enter image description here

最佳答案

我也有类似的情况。我的指令必须等待第三方库完成一些 DOM 操作。我使用重试函数每 50 毫秒检查一次,看看我需要的 DOM 元素是否存在。

在指令中:

Utils.retry(function() { return !!$(selector)[0]; }, 50, 10).then(function() {         
  doSomethingInterestingWith($(selector));
});

重试函数(我在 Utils 服务中定义了它):

var retry = function(fn, interval, maxTries) {
  var result, deferred;
  deferred = $q.defer();

  // if we get a result, return it
  result = fn();
  if (result !== false) { deferred.resolve(result); }

  else {
    // if we've run out of tries, return false
    if (maxTries) { maxTries -= 1; }
    if (maxTries === 0) { deferred.reject('timed out'); }

    // otherwise try again after interval
    else {
      $timeout(function() {
        deferred.resolve(retry(fn, interval, maxTries));
      }, interval);
    }
  }

  return deferred.promise;
};

Utils.retry = retry;

参见 plunk一个工作示例。

关于angularjs - 延迟 Angular 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923888/

相关文章:

angularjs - 对象 'directives' 未定义错误

javascript - ng 类表达式 : merge condition and class name

angularjs - 应用程序配置+stateProvider

javascript - 指令的依赖

Angular 4 - 如何在模糊时调用自定义验证器?

javascript - 如何一次调用 $watch 中的函数?

java - 是否可以在指令中检索 Freemarker 参数值?

javascript - 为什么我无法获得对 AngularJS Videogular 中可以看到的元素的引用?

javascript - 如果文本框为空,则出现 angularjs Nan

angularjs - 错误在严格模式下不允许对象文字中的重复数据属性