2016-02-26 59 views
2

首先,我看了其他问题在stackoverflow关于它,我收到了许多答案,但仍然无法解决我的问题。AngularJS视图不更新当模型改变

我正在使用Angular Material,并且在查看模型同步时遇到问题&。

这是我的控制器代码:

$scope.getQuestionByDateRange = function (range) { 
    QuestionService.getQuestions(1, 'week', 10, function (response) { 
     $scope.questions = response.data; 
    }) 
} 

这是我的看法代码:

<ul> 
    <li ng-repeat="question in questions">{{question.title}}<li> 
<ul> 

我的观点正确渲染模式,同时我更新控制器$scope.questions变量。

但是当我再次更新$scope.questions:我的模型得到更新(我可以看到控制台日志中的更改),但视图没有。

我研究它,我发现像$scope.$apply,$scope.$digest,$scope.$evalAsync的解决方案,但无法解决我的问题。

怎么了?

+3

你能提供更多的代码或小提琴让我们看到你的问题吗? –

+0

您是将问题设置为新数组还是将新元素推入现有数组? –

+0

@DaveBush我推送新元素到现有的数组。 –

回答

4

这里的问题是,整个对象被替换(因此它失去它的结合视图)。

我会代替整个对象;只是取代它的元素。

$scope.questions = $scope.questions || []; 
$scope.getQuestionByDateRange = function (range) { 
QuestionService.getQuestions(1, 'week', 10, function (response) { 
    $scope.questions.length=0; // Reset the array 
    $scope.questions.push.apply($scope.questions, response.data); 
}) 
} 
+0

这就是我一直在试着去问的。如果他不重复使用相同的数组,这是正确的答案。 –

0

你可以用$腕表方法做到这一点:

$scope.$watch('questions', function(){ 
    $scope.getQuestionByDateRange(range); 
}); 

$表方法各$ scope.question修改

+0

这是一个不应该被需要的破解 –

+2

它会导致$ scope.getQuestionByDateRange调用的无限循环 –

0

您遇到的是你要替换的问题时触发整个数组,这似乎会导致与Angular的问题。

$scope.getQuestionByDateRange = function (range) { 
 
    QuestionService.getQuestions(1, 'week', 10, function (response) { 
 
     $scope.questions.push.apply($scope.questions, response.data); 
 
    }); 
 
}