3

onload コールバックからスクリプトをロードした後、コントローラーの状態を更新しようとしています。

Google クライアント 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; 
  })
}

デモ:プランカー

コントローラー インスタンスを取得する場合は、予想される注入値を手動で渡す必要があります。

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

デモ:プランカー

于 2013-04-24T03:20:37.153 に答える