AngularJS:我可以将回调附加到模块的run方法吗?

时间:2015-04-28 16:59:56

标签: angularjs callback google-plus angularjs-module

高级问题:

  • 我想知道当前用户是否已登录Google Plus。

部分解决方案:

并发症:

具体问题:

  • 我想将一个回调方法附加到onload参数,但是https://apis.google.com/js/client.js的异步JavaScript提取是在AngularJS的run方法中发生的。

- >模块初始化:

.run([function() {  
  var po = document.createElement('script');  
  po.type = 'text/javascript';  
  po.async = true;  
  po.src = 'https://apis.google.com/js/client.js';  
  var s = document.getElementsByTagName('script')[0];  
  s.parentNode.insertBefore(po, s);  
}]);

虽然Google建议您异步提取https://apis.google.com/js/client.js,但我并不坚持。但我想将大部分Google+集成代码保留在AngularJS Provider或AngularJS服务中。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我没有看到使用onload方法有什么问题。

.run(['$rootScope', function($rootScope) {  
    var po = document.createElement('script');  
    po.type = 'text/javascript';  
    po.async = true;  
    po.src = 'https://apis.google.com/js/client.js';  
    po.onload = function(){
        //it's loaded. Inject a service in your run and you can do stuff here
        $rootScope.$apply(); //assuming your callback needs to do something within angular
    };
    var s = document.getElementsByTagName('script')[0];  
    s.parentNode.insertBefore(po, s);
}]);