【发布时间】:2014-02-14 08:13:47
【问题描述】:
AngularJS 中是否可以避免再次渲染视图?
我有一个页面,它从数据库中查询数据并将其显示到视图中,但是当我导航到另一个页面时,然后再次导航回来。它再次渲染视图。
在 AngularJS 中是否有可能只保留渲染的视图?我不想再次查询数据并重新渲染视图。我想立即显示渲染的视图,而无需再次查询数据。
【问题讨论】:
标签: javascript angularjs
AngularJS 中是否可以避免再次渲染视图?
我有一个页面,它从数据库中查询数据并将其显示到视图中,但是当我导航到另一个页面时,然后再次导航回来。它再次渲染视图。
在 AngularJS 中是否有可能只保留渲染的视图?我不想再次查询数据并重新渲染视图。我想立即显示渲染的视图,而无需再次查询数据。
【问题讨论】:
标签: javascript angularjs
如果您将数据保存或缓存在服务中,则可以避免每次都查询服务器。 Promise 是一个很好的方法来做到这一点。考虑以下示例,该示例使用 $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;
}
};
});
由于第一次调用dataService()时设置了promise,如果已经存在则返回现有的promise,所以只有第一次调用dataService()才会真正进行HTTP调用;其余的将使用现有值。
【讨论】:
ngRoute,我不确定有什么方法可以防止这种情况发生。如果您要管理自己的视图,则可以使用 ngShow/ngHide,但请记住,当您的视图加载时,您的范围观察者将被触发。