2016-08-23 1 views
5

getData関数に渡す必要があるパラメータが未定義のng-tableを使用して問題が発生しています。私はAngularJSとng-tableの初心者ですから、どんな助けもありがたいです。私は、以下のコードのREST呼び出しを直接呼び出すことで動作することを確認しました。そのため、問題は角度コード/設定のどこかにあります。ng-tableのgetData関数で未定義のパラメータ

とにかく、私のコントローラの疑似例です。実際のコードはイントラネット上にあるので、直接貼り付けることはできません。したがって、転写からの誤字を赦してください。 NG-表1.0.0および1.5.8の角を使用した:

myApp.controller('myCtrl', ['$scope', '$http', 'NgTableParams', 
    function($scope, $http, NgTableParams) { 
    $http.get('services/data/count').success(function(data) { 
     // this works fine 
     $scope.totalRows = data.rowCount; 
    }); 
    $scope.tableParams = new NgTableParams({ 
     page: 1 
     count: 20 
    }, { 
     total: $scope.totalRows, 
     getData: function($defer, params) { 
      // this line fails with params being undefined 
      $http.get('/services/data/' + params.page() + '/' + params.count()) { 
      .success(function(data) { 
       $scope.data = data; 
       $defer.resolve(data); 
      }); 
     } 
    }); 
}]); 

そして、ここでは、HTMLの関連作品です:

<table ng-table="tableParams" class="table table-condensed table-striped"> 
    <tr ng-repeat="row in data"> 
     // row stuff here 
    </tr> 
</table> 

私はのgetData HTTP呼び出しの前にconsole.logステートメントを挿入しました、 paramsは定義されていないものとして出力されます。

+0

を私はあなたが 'あなた' $のdefer'変数をconsole.log'場合は、あなたがオブジェクトを参照してくださいよ疑うます「params」が成立することを期待していた。 –

+0

また、 '$ http。success'は廃止予定です(https://docs.angularjs.org/api/ng/service/$http#deprecation-notice)。代わりに 'then(function(response)、function(rejectionReason))'を使用してください。 –

+0

$ deferに必要な値があります。このJSの初心者からの質問は「なぜ?」と思います。しかし、私は今、前進することができます。どうもありがとう。 –

答えて

5

申し訳ありませんが、私のコメントが混乱するとは思わなかった。あなたの答えは次のとおりです:

のキーに入れた機能は、を表すただ1つの引数をとると(NgTable APIによって)仮定されます。言い換えると、関数の最初の引数は、$deferという名前であっても、常にparamsの値を含みます。そして、第2引数は、あなたがそれをparamsと命名したとしても、常に定義されていません(APIは、結局はただ1つの引数で呼び出します)。

あなたは$deferにアクセスしたい(そして、あなたが行うことと思われる)場合、私はあなたが(一番上に依存アレイに'$defer'を追加し、あなたのコントローラの引数リストに$deferを追加するには、コントローラに注入すべきだと思います。同じ位置で機能

それは次のようになります。

myApp.controller('myCtrl', ['$scope', '$http', '$defer', 'NgTableParams', 
    function($scope, $http, $defer, NgTableParams) { 
    $http.get('services/data/count').success(function(data) { 
     $scope.totalRows = data.rowCount; 
    }); 
    // ... 
    getData: function(params) { 
     $http.get('/services/data/' + params.page() + '/' + params.count()) { 
     .success(function(data) { 
      $scope.data = data; 
      $defer.resolve(data); 
     }); 
    } 
+1

は '$ defer'が古いng-tableに含まれていましたか?また、古いバージョンでは大文字の 'NgTableParams'を使用する現在の' ngTableParams'には小文字の 'n'を使用していました。 – dork

0

$ defer変数(ありがとうJesse Amano!)に必要な値がありました。なぜこれが機能するのか分かりませんが、私はそれを使うことができます。

5

を私はNG-テーブルを更新したとき、私はまた、この問題に走りました。あなたのコードは1.0.0より前のバージョンで動作するはずです。 1.0.0-beta.9はあなたのコードをサポートする最後のバージョンです。で

1.0.0 change notesそれは言う:あなたのgetDataメソッドに供給

のgetData署名変更

$の延期のparamaterが削除されました。代わりに、 getDataメソッドは配列または配列に解決する約束を返します。

以前

移行するには:今

var tp = new NgTableParams({}, { getData: getData }); 

function getData($defer, params){ 
    // snip 
    $defer.resolve(yourDataArray); 
} 

var tp = new NgTableParams({}, { getData: getData }); 

function getData(params){ 
    // snip 
    return yourDataArrayOrPromise; 
}