我在ng-grid表中有一个包含特定字段的列。我需要根据当前登录的用户给它2个不同的名称。我怎么能这样做?
限制使它不那么简单。该名称通过XHR加载为appConfig.columnName(存储在$ rootScope上)。
columnDefs:
{
displayName: "{{ appConfig.columnLabel }}",
从不进行插值,只显示为{{appConfig.columnLabel}}
columnDefs:
{
displayName: $rootScope.appConfig.columnLabel,
有时失败,因为appConfig可能尚未定义。 (如果我先加载不同的视图,这确实有效)
我不知道如何等待appConfig,它是作为一个服务加载的,与加载哪个视图无关。即使我这样做,如何推迟在ng-grid上设置配置?
看起来这应该很容易,但证明很难。
答案 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();
});
}