2017-05-31 40 views
1

私はコントローラ "userCrtl"にある$ scope.parents変数を持っています。問題は、その値がAJAX呼び出し後に更新されていないことです。 $ qを使用して約束を終えた後に変更を適用しようとしました。しかし、私は成功しませんでした。 $ scope.watchを使って変更を検出しようとしましたが、このメソッドは決して開始されません。その結果、私のHTMLページは更新されません。 console.log($ scope.parents)を使用すると、$ scope.parentsの値は正常に表示されますが、htmlビューは更新されません。 $ scope.parentsがデフォルト値($ scope.parents = "test")で初期化されている場合、この値は表示されますが、それ以上は変更されません。 最も不満な点は、他のアプリケーションコントローラでも同じことをやっていて、すべて正常に動作することです。 $ scope変数の以前に定義された値のみがhtmlに表示されています。

app.controller("userCtrl", function($scope, userService, $http) { 
    $scope.panels = userService.get(); 
    $scope.parents = null; 
    $scope.start = function(panel) { 
     // Get parents blocks 
     $http.get(path + "getpaneluser /" + panel.painelUsername).then (function (response) { 
      $scope.parents = response.data; 
     // Here the value of parents is normally displayed 
        console.log($scope.parents); 
     }, function(error) { 
     }); 
    }; 
// Displays only null, even if $scope.parents has a value after the AJAX call 
    $scope.$Watch('parents', function() { 
     console.log($scope.parents); 
    }); 
}); 

HTMLコード: には、以下のコントローラのコードである。

<div class="col-lg-12" style="padding-right: 0%;"> 
{{parents}} <!-- value never displayed --> 
    <div ng-repeat="item in parents" class="declareContainer"> 
     {{item}} 
    </div> 
</div> 

があなたのAJAX呼び出しのスコープの後にあなたの助け

+2

コードに誤字があります:$ scope。$ Watchは$ scopeでなければなりませんが、これはyの理由ではありません私たちの問題 –

+0

あなたが提供したhtmlテンプレートがuserCtrl内にあり、別のコントローラの範囲にないことを確認できますか?これは、userCtrlで設定された$ scope.parentsが独自の子スコープ内にあり、HTMLテンプレートでは使用できないため、UIがuserCtrlによってロードされた新しい値ではなく古い値を表示し続ける理由を説明します。 「userCtrl」が 私はその後、実際には右 – CodeWarrior

+0

だから友人は、ルーティング内部app.jsで次のように定義します$ scope.parentsに変更を適用するには$ apply()を使用しなければなりません –

答えて

2

ありがとうございました$がスコープ内にデータを適用する

$http.get(path + "getpaneluser /" + panel.painelUsername).then (function (response) { 
      $scope.parents = response.data; 
     // Here the value of parents is normally displayed 
        console.log($scope.parents); 
    $scope.$apply() 
     }, function(error) { 
     }); 
+2

、ある愚か()呼び出しは次のとおりです。 templateUrl:「ビュー/ panelUser.html」、 コントローラ –

+0

私の友人は、問題は続きます...私はもう何を試していいのか分かりません。 $ scope.parentsの値は、console.log($ scope.parents)を介してバックエンドでのみ取得できますか。私のルーティングでは、私は、各ルートのhtmlテンプレートとコントローラを設定します。 実際、$ scope.parentsがある値で初期化されていれば、その値をhtmlページに表示できます。変数の値が変更された場合、HTMLは静的なままです。 –

+0

私は自分の問題を理解しやすくするために何が起こっているのかを示すビデオを作ることが最善であると思います。 –

関連する問題