我有一个应用程序在我点击页面上的链接时运行正常,但如果我使用浏览器的后退和前进按钮,它会以下列方式中断:
- 它向服务器发送请求,但仅在“返回”时。
- 模板根本不渲染。
此外,当我点击“返回”从页面 B 转到页面 A 时,chrome 的“刷新/停止”按钮在顶部选项之间快速闪烁,并且反复尝试返回和前进会导致更长的闪烁。
以下是我认为相关的代码片段:
编辑:我正在开发一个 plnkr,但该站点目前无法正常工作。我会在它启动时更新,我可以验证不良行为
编辑 2:这是 plnkr,但它有问题。它找不到 app.js 路由中指定的 templateUrls,不知道为什么。无论如何,这是代码http://plnkr.co/edit/6cQtnvLi10sJKW8jVzVM
编辑3:在朋友的帮助下,我认为问题来自在rails 4上使用turbo-links。我现在无法测试它,但如果可以的话,我会发布一个答案。
文件:app.js
window.App = angular.module('app', [
'templates',
'ui.bootstrap'
])
.config(['$routeProvider', '$locationProvider',
function($routeProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when('/', {
controller: 'HomeCtrl',
templateUrl: 'home.html'
})
.when('/bars', {
controller: 'BarsPublicCtrl',
templateUrl: 'bars_public.html'
})
.when('/bars/:bar_name', {
controller: 'BarsDetailPublicCtrl',
templateUrl: 'bars_detail_public.html'
})
.otherwise({redirectTo: '/'});
}]);
文件:bars_public_ctrl.js
App.controller('BarsPublicCtrl', ['$scope', '$location', 'BarsPublicDataFactory',
function($scope, $location, BarsPublicDataFactory) {
// memoization
$scope.bars = $scope.bars || BarsPublicDataFactory.getBars();
}
]);
BarsPublicDataFactory 只返回一个假数据的静态数组,与以下代码段中的工厂相同
文件:bars_detail_public_ctrl.js
App.controller('BarsDetailPublicCtrl', ['$scope', '$routeParams', 'BarsDetailPublicDataFactory',
function($scope, $routeParams, BarsDetailPublicDataFactory) {
$scope.bar = {};
$scope.bar.name = $routeParams.barId;
$scope.barDetails = BarsDetailPublicDataFactory.getBaz($routeParams.bar_name);
$scope.Bazs = BarsDetailPublicDataFactory.getBazs();
}]);
文件:bars_public.html
<div class="container">
<div ng-repeat="bar in bars">
<div class="row">
<div class="col-sm-12">
<a href="/bars/{{bar.name}}">
<h4 style="display:inline;">{{ bar.name }}</h4>
</a>
</div>
</div>
<hr />
</div>
</div>
文件:bars_detail_public.html
<select ng-model="searchSelect.style" style="width:100%;">
<option value='' selected>All</option>
<option ng-repeat="baz in bazs">{{baz}}</option>
</select>
<div>
<accordion close-others="true">
<accordion-group ng-repeat="foo in foos | filter:searchSelect">
<accordion-heading>
<div>
<h3>{{foo.name}}</h3>
<em>{{foo.style}}</em>
</div>
</accordion-heading>
</accordion-group>
</accordion>
</div>
如果您还需要什么,请告诉我。