Shl*_*rtz 8 javascript asynchronous angularjs
我有一个第三方库,异步加载到我的页面,我想将它用作服务.
如何将加载代码包装在角度服务中?一般来说,最佳做法是什么?
目前我的做法是这样的:
angular.module('myAPIServices', []).
factory('MyAPI', function () {
return {
\\ API is declared at the loaded script
doStuff:function(){$window.API.doStuff()}
};
});
Run Code Online (Sandbox Code Playgroud)
然后在Angular范围之外的页面上
(function () {
var js = document.createElement('script');
var loc = document.getElementsByTagName('script')[0];
js.async = true;
js.src = "myAPI.js";
loc.parentNode.insertBefore(js, loc);
}());
Run Code Online (Sandbox Code Playgroud)
一种可能性是将您的库调用包装在$q中。这个角度服务返回一个承诺,您可以在库完全加载时解决该承诺。
你的doStuff函数会是这样的:
doStuff: function() {
var deferred = $q.defer();
myAsyncCall().success(function(data) {
deferred.resolve(data);
});
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
在您的控制器中,您使用该then()函数来处理结果。
第二种可能性是回调。这是两种类型的示例。
如果您的库正在操作 DOM,最好将其包装在指令中。
| 归档时间: |
|
| 查看次数: |
5406 次 |
| 最近记录: |