回调如何与 Angularjs 中的 $scope 一起使用

How callbacks work with $scope in Angularjs

假设我们有一个外部模块有一个函数需要 async 任务的回调参数。由于我们的参数是一个函数,并且他们在他们的模块中调用了该回调函数,那么我们如何使用摘要循环之外的 $scope 呢? angularjs 如何处理此类事情?

而且我们在这种情况下也使用 $scope.apply()$scope.digest(),那么它们是如何工作的?

注意:不一定需要你提供一些代码,只是想了解一下概念。谢谢。

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;
    }
  }
})

现在您可以从 angular 项目的任何位置调用 externalModuleWrap,没有任何问题。