【发布时间】:2016-01-08 00:13:54
【问题描述】:
我正在尝试构建一个概念验证单页应用程序,该应用程序使用历史 API 来存储视图的状态,这样当用户使用浏览器的后退和前进按钮进行导航时,将显示之前的状态。
这个简单的例子是一系列页面链接和一些显示的值,以显示状态的状态(没有双关语)。
这一切都在一个函数plnkr中
基本观点:
<div ng-app="testApp">
<div ng-controller="testCtrl">
<h1>State Data: {{data.displayText}}</h1>
<h2>Current Page: {{data.currentPage}}</h2>
<a ng-click="goToPage(page)" ng-repeat="page in pages" class="page">{{page}}</a>
</div>
</div>
应用/控制器:
var testApp = angular.module('testApp', ['ngRoute'])
.config(function($locationProvider) {
$locationProvider.html5Mode(true);
});
testApp.controller('testCtrl', ['$scope', '$location', function ($scope, $location) {
// Hardcode some pages
$scope.pages = [1, 2, 3, 4, 5, 6, 7, 8, 9];
// Set initial data
$scope.data = {
currentPage: 1,
displayText: "This is the initial state"
};
// Set initial data in state
$location.state($scope.data);
// Watch for location changes so we can apply state accordingly
$scope.$on('$locationChangeSuccess', function (a, newUrl, oldUrl) {
$scope.data = $location.state();
});
// Move between pages
$scope.goToPage = function (page) {
$scope.data.currentPage = page;
$scope.data.displayText = "This is page " + page;
$location.search("page", page);
$location.state($scope.data);
//history.pushState($scope.data, null, '/ThisPage?page=' + page);
};
}]);
您会注意到注释的 history.pushState() 行。 使用该行而不是上面的 $location.search() 和 $location.state() 行实际上可以像我一样工作和执行'会期望的,但我想使用正确的角度方式让它工作。
编辑: 明确地说,我不是在问我是否应该以有角度的方式来做这件事。我在问什么是让这个工作的正确角度方式。在 $scope.goToPage() 中对 $location 的两次调用不起作用,但对 history.pushState (注释行)的调用确实起作用。我显然错过了如何用纯角度实现这一点的东西,这就是我需要帮助的地方。干杯!
【问题讨论】:
-
哦,你这个选民,要有建设性,并通过留下有用的评论来帮助改善这一点。
标签: javascript angularjs