从调用脚本的onload角控制器控制器、脚本、onload

2023-09-13 03:28:59 作者:·城市户口的农村人、

我想从回调的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