如何在运行时配置ng-grid列名

时间:2014-02-02 22:45:09

标签: angularjs ng-grid

我在ng-grid表中有一个包含特定字段的列。我需要根据当前登录的用户给它2个不同的名称。我怎么能这样做?

限制使它不那么简单。该名称通过XHR加载为appConfig.columnName(存储在$ rootScope上)。

columnDefs: 
{
     displayName: "{{ appConfig.columnLabel }}",

从不进行插值,只显示为{{appConfig.columnLabel}}

columnDefs:
{
     displayName: $rootScope.appConfig.columnLabel,

有时失败,因为appConfig可能尚未定义。 (如果我先加载不同的视图,这确实有效)

我不知道如何等待appConfig,它是作为一个服务加载的,与加载哪个视图无关。即使我这样做,如何推迟在ng-grid上设置配置?

看起来这应该很容易,但证明很难。

1 个答案:

答案 0 :(得分:2)

看@这个问题https://github.com/angular-ui/ng-grid/issues/128我明白了。我将columnDefs移动到$ scope,如下所示:

$scope.gridColumnDefs = [
    ...
    {
        displayName: $rootScope.appConfig && $rootScope.appConfig.columnLabel ? $rootScope.appConfig.columnLabel : "",
        field: 'something',
    }
    ...
]

让网格配置像这样观察列defs:

$scope.gridOptions = {
     ...
     columnDefs: 'gridColumnDefs',
     ...
    };

然后观察$ rootScope上的appConfig对象以等待appConfig数据的到来,并使用标题调整columnDefs。

if(!$rootScope.appConfig.hasOwnProperty('columnLabel')) {
    var unwatch = $rootScope.$watch('appConfig',function(newValue, oldValue) {
        if(newValue.employerLabel) {
            _.forEach($scope.gridColumnDefs, function(colDef) {
                if(obj.field == 'something') {
                    colDef.displayName = $rootScope.appConfig.columnLabel;
                }
            });
            unwatch();
            unwatch = angular.noop;   // $destroy listener is going to call unwatch
        }
    });
    $scope.$on("$destroy", function() {  // Don't leak this watcher on the $rootScope
        unwatch();
    });
}