如何使用$ evalAsync在成功发布后刷新表

时间:2014-10-08 17:36:49

标签: ajax angularjs

我需要在成功发布后更新我的表而不重新加载页面。我有一个成功的Put工作,但我不能让它与邮政工作。 作品

 //Update Job 
$scope.updateJob = function (job) {
    jobFactory.updateJob(job)
        .success(successCallback)
        .error(errorCallback);
    console.log(job);
    $scope.cancelEditJobModal();
    $scope.$evalAsync(function () {
        $scope.job;
    });
};

不起作用

//Post New Job
$scope.submitJob = function () {
    var data = {
        JobId: $scope.newItems.JobId,
        JobNumber: $scope.newItems.JobNumber,
        JobName: $scope.newItems.JobName,
        JobDescription: $scope.newItems.JobDescription,
    }
    $http.post('/api/apiJob/PostNewJob', data).success(function (data, status, headers) {
        console.log(data);
        $scope.cancelNewJobModal();
        $scope.$evalAsync(function () {
            $scope.data;
        });
    });
};

1 个答案:

答案 0 :(得分:1)

根据你的写作,目前尚不清楚你想要达到的目标。

我从您的代码中看到,您正在发布一份工作来保存它。首先,服务器是否正确保存,响应是什么(例如成功处理程序中的数据)?然后,如果您的作用域中有一系列作业,则必须手动将新项目推送到该数组。

所以要给出一个提示,这是你的代码片段,经过修改以将新作业推送到集合中:

//Post New Job
$scope.submitJob = function () {

    var data = {
        JobId: $scope.newItems.JobId,
        JobNumber: $scope.newItems.JobNumber,
        JobName: $scope.newItems.JobName,
        JobDescription: $scope.newItems.JobDescription,
    };

    $http.post('/api/apiJob/PostNewJob', data)
        .success(function (data, status, headers) {

            // Clone newItem, newItem is a reference
            var tmpNewItem = angular.copy($scope.newItem);

            // This assumes you have $scope.jobslist as your collection
            // Now we can attach cloned newItem to collection
            $scope.jobslist.push(tmpNewItem)

            // Reset newItem, no need for $apply like this
            angular.copy({}, $scope.newItem);

            $scope.cancelNewJobModal();
        });
};

我设置了一个快速示例,用于推送新项目(不含$ http)http://jsfiddle.net/yy3mrh34/3/

此外,在您的代码示例中,更新似乎有效,因为双向数据绑定。 Angular正在立即更改值,并且不依赖于服务器来正确保存。