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}好的。请参阅我编辑的答案;)