AngularJS是否可以避免再次渲染视图?
我有一个页面,它从数据库查询数据并将其显示在视图中,但是当我导航到另一个页面,然后再次导航回来。它再次呈现视图。
AngularJS是否可以保留渲染视图?我不想再次查询数据并重新渲染视图。我想立即显示渲染的视图而不再查询数据。
答案 0 :(得分:2)
如果在服务中保存或缓存数据,则可以避免每次查询服务器。承诺是一个很好的方式来做到这一点。请考虑以下示例,该示例使用$http
返回的承诺(但您可以使用$q
轻松创建自己的承诺):
app.controller('SomeController', function($scope, dataService) {
dataService().success(function(data) {
$scope.myData = data;
});
});
app.factory('dataService', function($http) {
var promise = null;
return function() {
if (promise) {
return promise;
} else {
promise = $http.get("...");
return promise;
}
};
});
由于promise
是在您第一次拨打dataService()
时设置的,如果现有promise
已经存在,则会返回现有dataService()
,只有第一次调用{{1}}才能实际生成{{1}}一个HTTP调用;其余的将使用现有的价值。