Javascript 无法从关联成功回调将对象推送到数组范围
我有默认数组:Javascript 无法从关联成功回调将对象推送到数组范围,javascript,arrays,angularjs,angularjs-scope,push,Javascript,Arrays,Angularjs,Angularjs Scope,Push,我有默认数组: $scope.columns = [ { field :"id", title : $translate.instant('ID'), width : 250, template: function(dataItem) { switch (da
$scope.columns = [
{
field :"id",
title : $translate.instant('ID'),
width : 250,
template: function(dataItem) {
switch (dataItem.id)
{
case null:
return "N/A";
default:
return dataItem.id;
}
}
},
{
field :"name",
title : $translate.instant('NAME'),
width: 250,
filterable: {
cell: {
operator: "contains"
}
}
}
];
我想在成功回调中将一个新项推送到这个数组中:
.success(function(data, status, headers, config) {
// successful data retrieval
console.log("request success, checking state");
console.log(data);
// sent status to global HTTP status service
var jsonResponse = ApiService.processReturnedHttpState(status);
console.log("Status response is " + jsonResponse.result);
// do something with data
switch (jsonResponse.result) {
case true:
console.log(data);
var newColumn = {
field :"TEST",
title : $translate.instant('TEST'),
width: "auto",
filterable: {
cell: {
operator: "contains"
}
},
};
$scope.$apply(function () {
$scope.columns.push(newColumn);
});
break;
case false:
growlNotifications.add($translate.instant('LIST_LOADING_ERROR'), 'error', $rootScope.notificationLifetime);
break;
}
}).error(function(data, status, headers, config) {
var jsonResponse = ApiService.processReturnedHttpState(status);
console.log("Processing error with status " + status);
growlNotifications.add($translate.instant('PROCESSING_REQUEST_ERROR') + jsonResponse.message, 'error', $rootScope.notificationLifetime);
// hide loading spinner
kendo.ui.progress(gridView, false);
});
我尝试了作用域应用和超时功能,但运气不好,新值从未添加到新的默认作用域中
模板如下:
{{columns}}
<div id="test_grid_wrapper" data-ng-controller="TestCtrl" ng-init="initData()">
<div id="test_grid" ng-if="contentAvailable" data-ng-controller="TestCtrl" ng-init="initGrid()" >
</div>
</div>
{{columns}
我怎样才能解决它呢
谢谢您的建议。您可以尝试:
$scope.$apply(function () {
$scope.columns.push(newColumn);
});
我认为concat()适用于两个数组,所以这里需要执行push()。
此外,我还可以直接访问$scope上的数组:
$scope.columns.push(newColumn)
也可能与此问题有关:
实际上,您不应该使用应该直接在作用域上更改的对象/数组,而应该将其包装在另一个对象中:
$scope.myData = {
columns: [
{
field :"id",
title : $translate.instant('ID'),
width : 250,
template: function(dataItem) {
switch (dataItem.id)
{
case null:
return "N/A";
default:
return dataItem.id;
}
}
},
{
field :"name",
title : $translate.instant('NAME'),
width: 250,
filterable: {
cell: {
operator: "contains"
}
}
}
]
};
然后像这样使用它:
{{myData.columns}}
无需使用
$scope.apply()。当您的异步请求返回时,只需执行以下操作:
$scope.columns.push(newColumn);
这将自动更新您的模板。我已经包括了一个示例。这不起作用。我认为成功回调和内部开关使scope.columns无法访问。您能为我们提供绑定$scope.columns的HTML模板吗?我刚才在您的模板中提出了一个问题,我看不到$scope.columns在哪里使用…在第一行{{columns}好的。请参阅我编辑的答案;)