回调如何在Angularjs中使用$ scope

时间:2017-10-02 14:46:39

标签: javascript angularjs angularjs-scope

想象一下,我们有一个外部模块有一个需要async任务的回调参数的函数。由于我们的参数是一个函数,并且它们在模块中调用了回调函数,所以我们如何使用不在我们的摘要周期中的$scopeangularjs如何处理这类事情?

此外,我们在这种情况下使用$scope.apply()$scope.digest(),那么它们如何运作?

注意:我不需要您提供一些代码,只是想了解概念。感谢。

1 个答案:

答案 0 :(得分:1)

externalModule.doSomething(param, function(result) {
  $scope.result = result;
  $scope.$apply();
})

实际上是这样的。然而,包装所有外部模块是一种很好的风格 - 作为一个例子,你可以看看$ http,$ interval,$ timeout包含对javascript函数的调用。 所以你应该把这段代码放在一些工厂的externalModuleWrap中:

module.factory('externalModuleWrap', function($rootScope, $q) {
  return {
    doSomething: function(param) {
      var defer = $q.defer();
      externalModule.doSomething(param, function(result) { defer.resolve(result); }
      $rootScope.$apply();
      return defer.promise;
    }
  }
})

现在你可以从角度项目的任何一点调用externalModuleWrap,没有问题。