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

时间:2015-01-08 13:37:28

标签: angularjs

我有以下服务:

.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;
            });
        });

这显示包含许多项目的列表。 但我有另一个服务和另一个控制器。我在那里更改了一个项目,当我保存并将数据发布到数据库时,我回到初始列表,我仍然看到旧列出的项目。我必须刷新浏览器以查看我编辑的内容。

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

$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()向我显示第一个屏幕时,我不知道为什么数据不是来自服务返回数据的新更改。似乎屏幕刚刚更改,但新数据未从服务返回。任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

我得到了它的工作。我改变了我的服务和控制器。在我的服务中,我使用另一种方法返回了一个对象,然后我也改变了我的控制器以使用返回的方法。

服务:

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

控制器:

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

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

答案 1 :(得分:0)

您只需要将更改的数据反映到您的HTML中 Angular有一个方法

$scope.$apply();

此方法既可以使用参数,也可以不使用参数。 希望这会有所帮助。