想象一下,我们有一个外部模块有一个需要async
任务的回调参数的函数。由于我们的参数是一个函数,并且它们在模块中调用了回调函数,所以我们如何使用不在我们的摘要周期中的$scope
? angularjs
如何处理这类事情?
此外,我们在这种情况下使用$scope.apply()
或$scope.digest()
,那么它们如何运作?
注意:我不需要您提供一些代码,只是想了解概念。感谢。
答案 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,没有问题。