视图未在AngularJS中更新

时间:2014-05-14 15:04:43

标签: angularjs view angularjs-scope angularjs-ng-repeat

我尝试显示数据时遇到问题。

  • 我发送表单并更新我的数据库(效果很好,后端还可以)
  • 我使用页面上的按钮返回主页
  • 主页的视图未更新,始终具有相同的值。 (似乎只有加载的模板,而不是查询)

我需要点击浏览器的按钮刷新才能看到新值。

“硬”刷新后,视图会更新。

为什么我需要完全刷新页面?

这是我的代码

JS:

我的服务GenericService (我创建了这项服务,因为我在几个控制器中使用它)

myApp.factory('GenericService', function ($http, $q, MyFunctions) {
    var data = {};

    function getDataIfNeeded(action) {

        action = action || 'default';

        if (data[action] !== undefined) {
            return $q.when(data[action]);
        }

        return $http({
            url: "php/functions.php",
            method: "GET",
            params: { 
                action: action, 
                dummy: MyFunctions.randomString(7)
            }
        }).then(function(response) {
            data[action] = response.data;
            return data[action];
        });
    }

    return {
        getData: getDataIfNeeded
    };
});

服务电话

myApp.controller('listCtrl', ['$scope', '$http', '$rootScope', '$location', 'GenericService',
function ($scope, $http, $rootScope, $location, GenericService) {

  GenericService.getData("get_projects").then(function (data) {
    $scope.projects = data;
  }); 

  GenericService.getData("get_projects_draft").then(function (data) {
    $scope.projects_in_draft = data;
  }); 

 }]);

HTML:

<div ng-controller="listCtrl">
 <div ng-repeat="project in projects">
       <span>{{ project.nom }}</span>
 </div>
 <div ng-repeat="project_draft in projects_in_draft">
       <span>{{ project_draft.nom }}</span>
 </div>
</div>

1 个答案:

答案 0 :(得分:3)

您的服务GenericService仅从服务器获取数据&#34;如果需要&#34;,这意味着本地data变量是否为空。当然,如果不重新加载服务,并在表单提交后,数据将不同步!所以你有两个选择:

如果服务器正在创建其他数据,即拥有AngularJS在表单提交后没有的数据,则需要执行另一个请求以获取新数据。只需清空本地data变量。

其他,如果服务器只是将数据保存在数据库中,并且没有执行任何其他操作而对页面上显示的内容产生影响,那么你就不要# 39; t必须做其他请求,因为你已经知道你发送到服务器的内容了!只需更新本地data变量。