在 AngularJS 中,突然更改路由有时会在新页面加载时导致闪烁。为了解决这个问题,我们可以延迟显示新路线,直到检索到所有必要的数据之后。
问题:如何将 AngularJS 配置为等到模型和数据完全加载后再显示一个新的路由,类似于Gmail的方式
解决方案:
为了防止闪烁,AngularJS在路由中提供了resolve属性。通过定义解析函数,我们可以指定在继续更改路由之前需要解析哪些依赖项。
考虑以下示例:
function PhoneListCtrl($scope, phones) { $scope.phones = phones; $scope.orderProp = 'age'; } PhoneListCtrl.resolve = { phones: function(Phone, $q) { var deferred = $q.defer(); Phone.query(function(successData) { deferred.resolve(successData); }, function(errorData) { deferred.reject(); }); return deferred.promise; } };
在此示例中,我们定义了一个解析PhoneListCtrl 的函数,返回电话数据的承诺。一旦 Promise 被解析,数据就可供控制器使用。
在 AngularJS 应用程序中配置路由:
angular.module('phonecat').config(['$routeProvider', function($routeProvider) { $routeProvider. when('/phones', { templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl, resolve: PhoneListCtrl.resolve }); }]);
通过使用解析属性,AngularJS 延迟路由更改,直到手机承诺已解决,确保在显示新页面之前加载数据。这种方法可以防止页面转换期间出现任何闪烁。
以上是AngularJS 如何通过延迟直到数据加载来防止路由更改闪烁?的详细内容。更多信息请关注PHP中文网其他相关文章!