0

如果我使用 Angular 的 $q,我是否需要担心使用 $evalAsyn 或 $apply?还是由 $q 自动处理?

4

1 回答 1

1

通常,您无需担心 Angular 中的 $digest/$apply/$evalSync 内容。根据此处的 $q 文档,

有一个简短的比较:

Kris Kowal 的 Q 和 $q 之间的差异

有两个主要区别:

  • $q与 angular 中的 $rootScope.Scope Scope 模型观察机制集成,这意味着可以更快地将分辨率或拒绝传播到您的模型中,并避免不必要的浏览器重绘,这会导致 UI 闪烁。
  • Q 比 $q 有更多的功能,但这是以字节为代价的。$q 很小,但包含常见异步任务所需的所有重要功能。

这是 $q 中的源代码。

this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
    return qFactory(function(callback) { //invoke qFactory
      $rootScope.$evalAsync(callback); //$evalAsync here...
    }, $exceptionHandler);
}];
function $$QProvider() {
  this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
    return qFactory(function(callback) {
      $browser.defer(callback);
    }, $exceptionHandler);
  }];
}
于 2014-11-10T04:41:45.197 回答