在单元格模板中使用函数

Arn*_*lle 12 angularjs angular-ui-grid

我正在使用带有ui-grid的angularjs.网格的一列包含一个时间戳,我想将其呈现为格式正确的日期.

到目前为止,我尝试过这样,但从未调用过该函数.

  $scope.formatDate = function(date) {
    return '42';
  };

  $scope.columns = [
    {field: 'date', cellTemplate: '<div class="ui-grid-cell-contents">formatDate({{row.entity.date}})</div>'},
    {field: 'title'},
    {field: 'quantity'},
    //[...]
  ];
Run Code Online (Sandbox Code Playgroud)

相反,函数调用被视为字符串文字.因此,该列始终显示formatDate(*timestamp*).

我只是通过在接收它们时在每一行上定义一个函数来找到一种不令人满意的方法来实现它:

  $scope.columns = [
    {field: 'getFormattedDate()'},
    //[...]
  ];

  $http.post('/api/data/').success(function (data) {
    $scope.gridOptions.data = data.elements;

    $scope.gridOptions.data.forEach(function(row) {
      row.getFormattedDate = function() {
        return '42';
      }
    })
  });
Run Code Online (Sandbox Code Playgroud)

还有更好的建议吗?

jnt*_*jns 19

如果您想使用ui-grid可以使用的控制器范围级别功能grid.appScope,这里有一个简单的例子:

{
    name: 'date',
    cellTemplate: '<div class="ui-grid-cell-contents">{{grid.appScope.parseDate(row.entity.date)}}</div>'
}
Run Code Online (Sandbox Code Playgroud)

完整示例:

angular.module('myApp', ['ui.grid'])
    .controller('myCtrl', ['$scope', function ($scope) {

    $scope.parseDate = function (p) {
        // Just return the value you want to output
        return p;
    }

    $scope.parseName = function (p) {
        // Just return the value you want to output
        return p;
    }

    $scope.gridOptions = {
        data: [{
            name: "Foo",
            date: "2015-10-12"
        }, {
            name: "Bar",
            date: "2014-10-12"
        }],
        columnDefs: [{
            name: 'name',
            cellTemplate: '<div class="ui-grid-cell-contents">{{grid.appScope.parseName(row.entity.name)}}</div>'
        }, {
            name: 'date',
            cellTemplate: '<div class="ui-grid-cell-contents">{{grid.appScope.parseDate(row.entity.date)}}</div>'
        }]
    };
}]);
Run Code Online (Sandbox Code Playgroud)

Fiddle Example