从调用脚本的onload角控制器 [英] Call Angular controller from script onload

查看:127
本文介绍了从调用脚本的onload角控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从回调的onload脚本加载后更新我的控制器的状态。

I am trying to update the state of my controller after loading of a script from onload callback.

我加载谷歌客户端API:

I load the Google Client API:

<script src="https://apis.google.com/js/client.js?onload=OnLoadCallback"></script>

然后在OnLoadCallback我尝试手动引导AngularJS并设置为我的控制器设置状态:

Then in OnLoadCallback I try to manually bootstrap AngularJS and set the set state on to my controller:

function OnLoadCallback() {         
      var $injector = angular.bootstrap(document, ['app']);
      // load required gapi APIs          
      var $controller = $injector.get('$controller');        
      var UserCtrl = $controller('UserCtrl');
      UserCtrl.user.apiLoaded = true;          
};

它似乎无法创建注入的$范围的控制器。作为呼叫 $控制器('UserCtrl')失败:

未捕获的错误:未知提供商:$ scopeProvider&LT; - $范围

Uncaught Error: Unknown provider: $scopeProvider <- $scope

您可以通过在此普拉克查看控制台中看到的错误。

You can see the error by viewing the console in this Plunk.

推荐答案

您控制器的用法是错误的,值在控制的范围被设定

Your usage of controller is wrong, the value has to be set in the scope of the controller

function OnLoadCallback() {
  //gapi.client.setApiKey('XXXXXXXXXXXX');
  //gapi.client.load('drive', 'v2', function() {
  var $injector = angular.bootstrap(document, ['app']);
  console.log('Angualar bootstrap complete');         


  var $scope = angular.element('body').scope();
  console.log('Find scope', $scope)

  $scope.$apply(function(){
    $scope.user.apiLoaded = true; 
  })
}

演示: Plunker

如果您想要得到的控制器实例,那么你将不得不手动通过注入预期值

If you want to get the controller instance, then you will have to manually pass the expected injected values

  var $controller = $injector.get('$controller');        
  var UserCtrl = $controller('UserCtrl', {
    $scope: $scope
  });
  console.log(UserCtrl, 'UserCtrl')

演示: Plunker

这篇关于从调用脚本的onload角控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆