插入数据时$scope.$apply不起作用



我想在http请求后立即显示新数据,而无需重新加载整个页面。我发现我可以为此使用来自angularjs的$apply。但我被困住了。数据不会立即显示。

这是控制器中的代码。

$scope.reload = function(data){
            $timeout(function () {
                $scope.$apply(function () {
                    console.log(data);
                    $scope.data = data;
                });
            });
        };
// This part is not working
$scope.addMilestone = function (){
            $http({
                url: httpUrl + 'api/milestone/add',
                method: 'post',
                data: $.param($scope.formData),
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            })
            .then(function (result) {
                $scope.data = result.data;
                $scope.reload($scope.data);
            });
        };
// This part is working
$scope.deleteMilestone = function(id){
            $http.get(httpUrl + 'api/milestone/delete?id=' + rowid).then(function(result){
                if (result.data === 'OK'){                        
                    $http.get(httpUrl + 'api/carts/content').then(function (returns) {
                        $scope.data = returns.data;
                        $scope.reload($scope.data);
                    });
                }
            });
        };

让我感到困惑的是,此方法适用于删除数据,但不适用于插入新数据。在$scope.deleteMilestone中,删除的数据会立即从视图中删除。我希望它也适用于$scope.addMilestone

对于您编写的部分,尝试这样做,它不起作用。

$scope.addMilestone = function (){
      $http.post('api/milestone/add', $scope.formData, {'Content-Type': 'application/x-www-form-urlencoded'})
                         .then(function (result) {
                    $scope.data = result.data;
                    $scope.reload($scope.data);
                });};

您的删除正在起作用,因为您在delete之后调用了get api,但add您没有进行该 API 调用,因此不会为您重新加载数据

将添加里程碑方法更改为,

$scope.addMilestone = function (){
    $http({
        url: httpUrl + 'api/milestone/add',
        method: 'post',
        data: $.param($scope.formData),
        headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    })
    .then(function (result) {
        if (result){                        
            $http.get(httpUrl + 'api/carts/content').then(function (returns) {
                $scope.data = returns.data;
                $scope.reload($scope.data);
            });
        }
    });
};

最新更新