3

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

我加载了谷歌客户端 API:

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

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

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;          
};

它似乎无法创建注入 $scope 的控制器。由于呼叫$controller('UserCtrl')失败:

未捕获的错误:未知的提供者:$scopeProvider <- $scope

您可以通过查看此Plunk中的控制台来查看错误。

4

1 回答 1

5

你对控制器的使用错误,值必须设置在控制器的范围内

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

如果要获取控制器实例,则必须手动传递预期的注入值

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

演示:Plunker

于 2013-04-24T03:20:37.153 回答