0

リモートサーバーからのデータを表示するテーブルがあります。数値入力があります。数値が変更されたときに、テーブルを更新したいです(引数に数値入力を使用して)。

これが私の現在の試みです:

$scope.$watch("number", function () {
    console.log("number changed");
    $scope.user_table_columns.length = 0;
    $scope.user_table_columns = [
        { title: 'Loading... (give it 20-25 seconds)', visible: true}
    ];
    if (typeof $scope.stats != "undefined")
        $scope.stats.length = 0;
    $scope.stats = [];
    //$scope.tableParams.reload();
    $http.get("/api/thing/"+$scope.number).then(function (result) {
        $scope.table_data = result.data;
        $scope.user_table_columns.length = 0;
        Object.keys($scope.stats[0]).forEach(function (col) {
            $scope.user_table_columns.push({ title: col, field: col, visible: true })
        });
    })
});

number changedログに入ります。しかし、新しい HTTP リクエストはありません。

4

2 に答える 2

0

この質問を午前 3 時に投稿しました。問題は説明の「タイプミス」であることが判明しました…</p>

(キャッシュに使用していたカーソルオブジェクトを、キャッシュしていた変数に割り当て、そのルートで返されました)

于 2014-05-17T06:19:15.237 に答える
0

@cjmling が言ったように、さらにログを追加してみてください。また、投稿したコードを編集して、いくつかのベスト プラクティスを使用しました。

$scope.$watch("number", function (newValue, oldValue) {
  $log.info("number changed");

  $scope.user_table_columns = [
    { title: 'Loading... (give it 20-25 seconds)', visible: true }
  ];

  $scope.stats = [];

  $http.get("/api/thing/" + $scope.number).
  success(function (data, status, headers, config) { 
    $scope.table_data = data;

    var keys = Object.keys($scope.stats[0]);
    angular.forEach(keys, function (col) {
      $scope.user_table_columns.push({ title: col, field: col, visible: true });
    });
  }).
  error(function (data, status, headers, config) {
    // An error occured, do something..
    $log.error('HTTP GET failed! Status code: ' + status);
  });    
});

angular が一般的な操作のために提供するいくつかのユーティリティ関数があります。以下は、Angular が提供するユーティリティのリストです: Angular Functions。注意すべきもう 1 つのことは、条件をチェックするときに型強制的な結果を引き起こす可能性があるため!=、一般的に避けたいことです。andには場所==がありますが、 andを使用する必要があると想定することは常に安全です。また、通常は、条件ブロックが 1 行であっても引用符で囲むことをお勧めします。これにより、人々はそれをより簡単に読むことができます。また、変数のプロパティを設定する必要はありません。これは、参照している配列を変更すると更新されます。!===!=====lengthuser_table_columns

$logangular サービスの使用法を追加しました。これを使用するのは良い習慣であり、情報をログアウトするための優れたユーティリティを提供します。$ログ

最後に、$httpサービスの使用方法を少し変更しました。一般に、リクエストを作成するときにsuccessおよび関数を定義すると便利です。errorを使用し.thenても問題なく動作しますが、リクエストが返されたときに何が起こったのかについての洞察はあまり得られません。リクエストで何が起こっているかを推測すると、エラーハンドラーを定義すると、おそらくいくつかの情報が得られます。問題をデバッグしようとするときは、より多くの情報が必要です。

これがあなたの質問に直接答えないことはわかっていますが、あなたが投稿した情報を考えると、あなた自身の問題を解決するための正しい方向にあなたを向けること以上のことをすることは困難です. ログアウトしているので"number changed"、AJAX リクエストが失敗していると思います。成功とエラーのコールバックの出力をログに記録し、リクエストが返されたときに何が起こっているかを確認します。これが少し役立つことを願っています。

于 2014-05-16T22:49:50.433 に答える