【问题标题】:$scope not updating after AJAX request and view change$scope 在 AJAX 请求和视图更改后不更新
【发布时间】:2014-07-29 02:30:26
【问题描述】:

我一直无法找出我的问题。这是我想要实现的目标的 jsfiddle,它可以工作 http://jsfiddle.net/NEuJ6/56/ 。当按下按钮时,视图会发生变化并更新范围。

但是,当我尝试使用以下代码在我的项目中执行此操作时,即使使用 $scope.$apply(); 也不会应用 $scope 更改。 .视图更改并且 $scope.foods 正确更新。但是,现在用于显示返回项目列表的列表页面不会更新。但是,如果将按钮添加到列表页面并按下它,页面会更新为新的 $scope.foods 项目。这意味着问题与更改视图和更新范围有关。但是,在我的简单小提琴中,我可以毫无问题地更改视图和更新范围。

$scope.getFoods = function(){
        $scope.foods = '';
        $location.path('/list');
        $http({
            url: 'http://127.0.0.1:8000/getfoods/',
            method: "POST",
            data: {address: $scope.location.address, cuisine: $scope.filters.cuisine},
            headers: {'Content-Type': 'application/json'}
        }).success(function (data) {
                $scope.foods = data;
                console.log($scope.foods);
                $scope.$apply();
        }).error(function (data, status) {
                console.log(status);
            }); 
    };

非常感谢您的帮助,谢谢。

【问题讨论】:

  • 这完全取决于foods 定义的位置或范围。
  • 而不是 $scope.foods=data。将每个元素推入$scope.foods, like angular.forEach(data,function(item) {$scope.foods.push(item);});
  • $scope.foods 使用由食品项目对象组成的数据进行更新,这些食品项目对象包含通过 django rest 框架序列化的名称、价格等信息。我会尽快尝试个人推送数据。手指交叉它的工作原理。
  • 你不需要 $scope.$apply。问题很可能是您期望更改的视图没有共享相同的$scope,因此看不到$scope.foods。如果您发布整个控制器和带有两个视图的 html,则更容易识别问题。

标签: angularjs


【解决方案1】:

我的一个项目也面临同样的问题。这对我有用。

试试这个:

        $http({
        url: 'http://127.0.0.1:8000/getfoods/',
        method: "POST",
        data: {address: $scope.location.address, cuisine:        $scope.filters.cuisine
            },
        headers: {'Content-Type': 'application/json'}
    }).success(function (data) {

            $scope.$apply(function(){ // put $scope var that needs to be updated
            $scope.foods = data;      // inside a function inside $apply like this
            console.log($scope.foods);
       });
          }).error(function (data, status) {
            console.log(status);
        }); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2020-02-27
    • 2014-07-22
    相关资源
    最近更新 更多