Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何在发送请求和状态更改后显示新数据_Angularjs - Fatal编程技术网

Angularjs 如何在发送请求和状态更改后显示新数据

Angularjs 如何在发送请求和状态更改后显示新数据,angularjs,Angularjs,我有以下服务: .service('TasksService', function ($http) { return $http.jsonp('http://blabla/json/?callback=JSON_CALLBACK'); }); 我的控制器: .controller("TasksCtrl", function ($scope, TasksService) { TasksService.then(function (TasksService)

我有以下服务:

.service('TasksService', function ($http) {
      return $http.jsonp('http://blabla/json/?callback=JSON_CALLBACK');
 });
我的控制器:

.controller("TasksCtrl", function ($scope, TasksService) {
            TasksService.then(function (TasksService) {
                $scope.Tasks = TasksService;
            });
        });
.controller("TasksCtrl", function ($scope, TasksService) {
            TasksService.getTasks().then(function (data) {
                $scope.Tasks = data;
            });
        });
这将显示包含许多项的列表。 但我有另一个服务和另一个控制器。我在那个里更改了一个项目,当我保存数据并将数据发布到数据库中,我回到初始列表时,仍然可以看到旧的列表项目。我必须刷新浏览器才能查看我编辑的内容

在第二个控制器中,我具有以下保存功能:

$scope.saveTask = function () {
    $http.post('http://blabla', $scope.Task.data).then(function (data) {
        // This shows the very first state with all the listed items
        $state.go('tasks'); 
    });
  };

当我保存更改时,
state.go()
会显示第一个屏幕,我不知道为什么数据不包含来自服务返回数据的新更改。看起来屏幕刚刚更改,但新数据没有从服务返回。有没有办法解决这个问题?

您只需要将更改后的数据反映到html中 Angular有一种方法可以做到这一点

$scope.$apply();
此方法既适用于参数,也适用于无参数。
希望这有帮助。

我让它工作起来了。我改变了我的服务和控制器。在我的服务中,我使用另一个方法返回了一个对象,然后我将控制器也更改为使用返回的方法

服务:

.service('TasksService', function ($http) {
            return {
                getTasks: function() {
                    return $http.jsonp('http://blabla/json/?callback=JSON_CALLBACK');
                }
            };
        });
以及控制器:

.controller("TasksCtrl", function ($scope, TasksService) {
            TasksService.then(function (TasksService) {
                $scope.Tasks = TasksService;
            });
        });
.controller("TasksCtrl", function ($scope, TasksService) {
            TasksService.getTasks().then(function (data) {
                $scope.Tasks = data;
            });
        });

现在它正在工作,我看到项目列表中列出了新保存和返回的数据。谢谢大家!

你如何回到最初的名单?
TasksCtrl
是否重新加载?只要使用$state.go('tasks'),TasksCtrl就应该重新加载,因为它与ui路由器相关。。但我不能百分之百确定我不能把它放在哪里。它一直在告诉我$digest已经在进行中。这是用来代替$state.go()的。或者,您可以重新加载您的状态,以便对您的范围应用新的更改