私は最近ngTableDynamic
ディレクティブを使用していました。しかし、私のテーブルが本当にダイナミックなときに問題にぶつかりつつ、予想するカラムの数やタイプをあらかじめ知っていません。私が知っている列を宣言し、私のコントローラの上部に約束の結果に基づいて動的なngテーブルにカラムを追加
は、すべてのテーブルに存在することになる。
$scope.columns = [
{ title: 'ID', field: 'id', visible: true, required: true },
{ title: 'Email', field: 'email', visible: true, required: true }
];
私はその結果を返すサービスへの非同期呼び出しを行います。これらの結果に基づいて、私は$scope.columns
に任意の追加の列オブジェクトをプッシュする:
var getResults = function() {
var defer = $q.defer();
reportService.getReportResults({
report: $scope.id,
version: $scope.version
}).$promise.then(function(data) {
$scope.data = data.results;
_.each($scope.data[0], function(value, key) {
if (key !== 'id' && key !== 'email') {
$scope.columns.push({
title: _str.capitalize(key),
field: key,
visible: true,
required: false
});
}
});
defer.resolve($scope.data);
});
return defer.promise;
};
しかし、列は、私は、ブラウザで表示するとき、私のテーブルにそれを作ることはありません_.each
内に押され。しかし私は、列が追加されたデータのセットの例のハードコーディングされたモックと私の非同期呼び出しを置き換える、すべてが期待通りに動作する場合:私のコントローラにさらにダウン
var getResults = function() {
var defer = $q.defer();
$scope.data = [{"id":"1","email":"[email protected]",,"create_date":"2013-09-03T09:00:00.000Z"},{"id":"2","email":"[email protected]","create_date":"2013-09-03T11:10:00.000Z"}];
_.each($scope.data[0], function(value, key) {
if (key !== 'id' && key !== 'email') {
$scope.columns.push({
title: _str.capitalize(key),
field: key,
visible: true,
required: false
});
}
});
defer.resolve($scope.data);
return defer.promise;
};
を私のinitコードが
getResults().then(function() {
$scope.tableParams.reload();
});
$scope.tableParams = new ngTableParams({...
を呼び出します
約束が解決されるとすぐに、$scope.columns
が更新される前に$scope.tableParams.reload();
が呼び出されると仮定します。
としてコントローラに直接
としてそれを試してみてくださいまたは 'そのgetResults()へ。その後、(...'コール'$ scope.tableParams'をインスタンス化したら? – Will
こんにちは、私は角度に堪能ではありませんが、ここで$約束が何を意味するのか教えてください。 'version:$ scope.version })$ promise' これまでにこのようなことは何も見たことがありません。 –
@Mridul https://docs.angularjs.org/api/ngResource/service/$resource、$ promiseを見つける –