我有以下案例。 一个ngGrid标签是从异步服务中读取的,因此标签是动态读取的,并且tey不是硬编码的。
我收集了所有异步调用,将标签数据提取到$ q.all中,然后在.then部分中提取数据。
但在某些情况下,标签不会显示在ngGrid中,所以这必须与异步调用和ngGrid同步有关。
我应该如何编码$ q.all及其异步调用,以便我确信当它们被设置为ngGrid时,它们包含正确的标签?
Br Dan
var deferred = $q.defer();
myService.getAttribute(key, function(label) {
var result = label;
deferred.resolve(result);
});
return deferred.promise;
};
/** Fetching labels asynchronously */
$q.all(
[ getLabelTxt('Form.Field1'),
getLabelTxt('Form.Field2'),
getLabelTxt('Form.Field3') ]).then(
function(data) {
$scope.setColDefs(data);
});
$scope.gridOptions = {
data : 'dataModel',
enableColumnResize : true,
selectedItems : [],
columnDefs : [
{
field : 'Field1',
displayName : ''
}, {
field : 'Field2',
displayName : ''
}, {
field : 'Field3',
displayName : ''
} ]
};
/** Setting values fetched from Asynch service */
$scope.setColDefs = function(rows) {
for (var i = 0; i < rows.length; i++) {
if ($scope.gridOptions.columnDefs[i] !== undefined) {
$scope.gridOptions.columnDefs[i].displayName = rows[i];
}
}
};
答案 0 :(得分:0)
ng-grid 2.x在columnDefs上放置一个$watch
,如果它是一个字符串。否则它不会做任何更新。您可以像这样定义columnDefs:
$scope.columns = [
{ field : 'Field1' },
{ field : 'Field2' },
{ field : 'Field3' }
];
$scope.gridOptions.columnDefs = 'columns';
然后直接更新$scope.columns
:
$scope.setColDefs = function(rows) {
for (var i = 0; i < rows.length; i++) {
if ($scope.columns[i] !== undefined) {
$scope.columns[i].displayName = rows[i];
}
}
};