回调如何与 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,没有任何问题。
假设我们有一个外部模块有一个函数需要 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,没有任何问题。