AngularJS来自服务器的绑定响应在视图中没有更新
AngularJS binding response from server not updating in view
我正在开发一个移动应用程序。我在尝试在视图中中继ajax调用后从服务器返回的消息时遇到了一个问题。这个想法是在用户点击"刷新"按钮后在视图中显示消息。
绑定没有完全像我希望的那样工作。它不会向用户显示当前消息,而是显示从以前单击刷新按钮收到的消息。因此,用户在加载视图后第一次单击按钮时,什么也没有发生……我不明白为什么视图更新不是即时的,而是只有当用户再次点击时才会改变。
下面是我的代码的简化版本:
HTML:<span ng-model="rec">{{rec}}</span>
<button ng-click="getNew()">
Refresh
</button>
JavaScript: $scope.rec = window.localStorage.getItem('content');
$scope.getNew = function() {
$.ajax({
...
success: function(result, textStatus, xhr) {
...
window.localStorage.setItem('content', result.content);
$scope.rec = window.localStorage.getItem('content');
}
},
error: function(xhr, textStatus, errorThrown) {
...
}
});
};
我知道,自从视图更新以来,ajax调用每次都是成功的,但是在应该成功的时候晚了一步。提前感谢您的帮助!
ajax调用完成后没有摘要循环,因此视图不会更新。如果使用$http
服务,而不是$.ajax
服务。然后视图将被更新。
代码应该是这样的:
$http({method: 'GET', url: '/someUrl'}).
success(function(data, status, headers, config) {
window.localStorage.setItem('content', data);
$scope.rec = data;
}).
error(function(data, status, headers, config) {
...
});
当然你必须注入$http
到你的控制器
当然!你必须使用Angular的$http服务。
阅读这篇文章
为了执行http调用,理想情况下您需要为这种场景创建一个工厂。默认情况下,实现http的工厂将返回一个承诺,你可以在这个承诺上更新你的作用域变量。
factory的语法为:
myapp.factory('getHttpData',function($http){
return{
getData: function(){
return $http.get('/urlA');
}
}
});
在你的控制器中:
.controller('testCtrl',['getHttpData',function(getHttpData){
getHttpData.getData().then(function(data){
$scope.rec = data;//Whatever you want to store in this variable
});
});
相关文章:
- 在Rails中更新Div,而不更改更新请求后的视图
- 如何在视图模型contet更新更新上调用Jquery函数
- 在控制器之间切换,可以't更新视图
- 拖动&删除Fullcalendar.io资源-更新视图
- 从 AngularJS 中的 ngview 内部的视图更新主页
- angularJS视图更新后初始化引导工具提示
- 定期轮询数据库,Rails 视图更新而不刷新
- 如何在 AngularJs 中的数据库发生变化时立即实现自动视图更新
- 如何从 AngularJS 视图更新变量
- ngModel 不会在第一次触发视图更新
- 木偶骨干复合视图 更新有关集合更改的模型数据
- AngularJS:视图更新正确,但模型没有更新
- AngularJS:在视图更新时运行函数
- Angular.js:模型更新不会触发视图更新
- 使用ngshow改进AngularJS视图更新
- 在Flask视图更新时显示数据流
- 如何检测浏览器何时完成了视图更新(重新布局,应用任何更改的CSS)
- Marionette中视图更新的延迟对象VS主干事件
- BackboneJS视图更新
- 从控制器更改视图不会触发视图更新