【发布时间】: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