3

奇妙な問題です。CtrlA で設定されている CtrlB 変数の $rootScope にアクセスできません。

HTML :

<div role="main" class="container_9" ng-controller="CountryCtrl" ng-init="updateToken('<?php echo $TOKEN; ?>')">  

CtrlA

app.controller('CountryCtrl', function ($scope,$rootScope, $http) {
  $scope.updateToken = function(token) {
        $rootScope.token = token;
  } 
});  

CtrlB

app.controller('DealerListCtrl', function ($scope, $http, $rootScope, dealerService) {
  $scope.dealer = [];
    $http.get('files/framework/dealer/'+ $rootScope.token).success(function(data) {
        $scope.dealerall = data;
    });
  //$scope.dealerall = dealerService.api.get({token: $scope.token});
  $scope.orderProp = 'name';

});  

エラーメッセージ:

/framework/dealer/undefined 500 (Internal Server Error)   

私は何を間違っていますか?

更新
プランカー コード:
http://plnkr.co/edit/r559zyMKjA64xSdmrTem

走る能力がない…

4

2 に答える 2

2

ここには 2 つの重要な問題があります。1 つ目は、サービスを使用する必要があるときに $rootScope を使用していること、2 つ目は、コントローラーの実行順序を想定していることです。ほんの一瞬のことである場合は、$watch コマンドを設定して変更を監視し、2 番目のコントローラーが設定されるたびに値が更新されるようにすることができます。

ただし、グローバル スコープを汚染するべきではありません。トークンをサービスにラップします。このサービスは注入可能で、変更を $watch できます。とはいえ、コントローラーがどのようなコンテキストで実行されるかを知らずに、より具体的なもの (コードなど) を投稿することはできません。

しかし、これが役立つことを願っています!必要に応じて投稿を更新して、さらに情報を追加してください。もう少し詳しく説明します。実際、私が直接変更できる Plunker や jsFiddle を作成していただけると助かります。

于 2013-01-07T19:23:47.283 に答える
0

ちゃんとアクセスしてい$rootScopeます。そうしないと、$rootScope が定義されていないという JavaScript エラーが発生します。代わりに、リクエスト URL の末尾に「未定義」を追加しています。つまり$rootScope.token、未定義です。$rootScope.tokenが定義されていることを確認するために必要なことは何でもしてください。

CtrlB が CtrlA の前に呼び出されていると思われるため、$rootScope.tokenまだ設定されていません。

于 2013-01-07T18:58:14.923 に答える