3

私は ng-grid を使用しており、一部の列にはフィルターが適用されています。ただし、今すぐ CSV にエクスポートすると、値はフィルターなしで表示されます。レコードは json で次のようになります。

{"service_date":"2014-02-10T00:00:00.000Z",
 "service_code":"someJob3",
 "price":1234.56}

ただし、グリッドでは次のように表示されます。

Service Date |Service Desc | Price
-------------------------------------
Feb 10,2014  |Some Job 3   | $1,234.56

フィルターが適用されているかのように表示される抽出を取得したいのですが、唯一の csv プラグインはセルフィルターを呼び出していないようで、値を生の形式で返すだけです。フィルターを呼び出すにはどうすればよいですか?

4

4 に答える 4

3

ui-grid (ng-grid の代替バージョン) で動作するソリューションを発見しました。これは、Matt Welch が ng-grid 2.0 用に開発しなければならなかったプラグインの回避策よりもはるかに簡単です。

gridOptions でを指定してexporterFieldCallbackから、 に基づいて必要なことを行うことができますcol.name。私のユースケースでは、配列インデックスへの相互参照に必要なユーザー ID がありました。テーブルの cellFilter を作成しましたが、次のように exporterFieldCallback を追加するまで、エクスポートされた CSV には明らかに反映されませんでした。

$scope.gridOptions = {
    ...

    exporterFieldCallback: function( grid, row, col, input ) {
        if( col.name == 'account_executive_id' || col.name == 'account_manager_id' ) {
            return adminUsers.getUserName(input);
        } else {
            return input;
        }
    },
    ...
}

コールバックには、grid、row、col、および入力変数が必要です。その後、コールバック内で何でも実行して、エクスポートする必要のある値を返すことができます。「グリッドに表示されているものを使用する」フラグがあればいいのですが、文書化されていないように見えても、これは非常に単純な解決策です。

于 2015-02-28T07:47:48.643 に答える
1

この質問は数か月前のものであることは知っていますが、同じことを探していて、問題の解決方法を文書化することにしました。

補足:ng-grid-wysiwyg-export.jsプラグイン フォルダーにプラグインがあることがわかりましたが、その使用に関する例やドキュメントが見つからず、理解するのに時間がかかりませんでした...

ng-grid plugins フォルダーに、CSV プラグインの例を含むファイルがあることわかりました。パラメーターを介してプラグイン コンストラクターに渡すことができるcolumnOverridesplayground.html機能の使用方法を示しました。opts

$scope.myData = [ 
    {hasThing: false,  obj: {a:5, b:6}, name: "Moroni", age: 50, ln: 'sdf'},
    {hasThing:  true,  obj: {a:6, b:7}, ln: "Tiasdfsdfnd", age: 43}
];

var csvOpts = { columnOverrides: { obj: function(o) { return o.a + '|' +  o.b; } } };

$scope.gridOptionsBig = {
    data: 'myData',
    plugins: [new ngGridCsvExportPlugin(csvOpts)],
    showFooter: true
};

上記の質問の例では、次のように、フィルターを適用する列ごとにオーバーライド関数を定義できます。

var csvOpts = { 
    columnOverrides: {
        service_date: function(d) { return $filter('date')(d); },
        service_code: function(c) { return $filter('myCustomCamelCaseFilter')(c); },
        price: function(p) { return $filter('currency')(p); }
    }
};

columnDefs から既に定義されている cellFilter を呼び出すだけでなく、これらを定義する必要があるのは少し余分な作業ですが、このアプローチにより、エクスポートされたデータが画面に表示されるものとわずかに異なるようにする柔軟性が得られます...おそらくより表現力豊かな日付形式など。

于 2014-08-04T18:24:28.590 に答える