イライラする朝を迎えています。
私はベースの場所を持つアプリを持っているので、頭の中は<base href="/my/path/fruits/index.html" />
. function を介してページングをセットアップしようとしていますnextPage()
。をトリガーするリンクをクリックするとnextPage()
、 を使用します$location.path('/page/:page')
。
予想される動作:ブラウザの場所の URL が に変わるはずhttp://localhost/my/path/fruits/page/2
です。
実際の動作:ブラウザの URL が (ごく短時間) に変わりhttp://localhost/my/path/fruits/page/2
、その後 に戻りますhttp://localhost/my/path/fruits/
。
注: ベース ロケーションを使用していない場合、この動作は発生しないようです。ただし、アプリはサーバーの sub/sub/sub ディレクトリにあるため、ベースの場所を使用する必要があります。
また、 を設定すると、この動作は発生しません$locationProvider.html5Mode(false)
。
私は何か間違ったことをしていますか?これは Angular のバグですか? どんな助けでも大歓迎です。
適切なファイルは次のとおりです。
index.html:
<!doctype html>
<html ng-app="fruits">
<head>
<base href="/my/path/fruits/index.html" />
<script src="angular.js"></script>
<script src="script.js"></script>
</head>
<body>
<div ng-controller="MainCntl">
<div ng-view></div>
</div>
</body>
</html>
script.js:
angular.module('fruits', [], function($routeProvider, $locationProvider) {
$routeProvider
.when('/', {
templateUrl: 'fruits.html',
controller: FruitCntl,
})
.when('/page/:page', {
templateUrl: 'fruits.html',
controller: FruitCntl,
})
.otherwise({redirectTo:'/'})
;
// configure html5
$locationProvider.html5Mode(true).hashPrefix('!');
}).filter('startFrom', function()
{
return function(input, start)
{
start = +start; //parse to int
if (input == undefined){
input = [];
}
return input.slice(start);
}
})
;
function MainCntl($scope,$location){
angular.extend($scope,{
current_page: 1,
per_page: 3,
fruits: [
{name: 'Apples', color: 'red'},
{name: 'Bananas', color: 'yellow'},
{name: 'Oranges', color: 'orange'},
{name: 'Grapes', color: 'purple'},
{name: 'Blueberries', color: 'blue'},
{name: 'Strawberries', color: 'red'},
{name: 'Raspberries', color: 'red'},
{name: 'Clementines', color: 'orange'},
{name: 'Pears', color: 'green'},
{name: 'Mangoes', color: 'orange'}
],
nextPage: function(){
this.current_page++;
$location.path('/page/'+this.current_page);
},
previousPage: function(){
this.current_page--;
$location.path('/page/'+this.current_page);
}
})
$scope.total_pages = Math.ceil($scope.fruits.length / $scope.per_page);
}
function FruitCntl($scope,$location,$routeParams){
if ($routeParams.page != undefined){
$scope.current_page = $routeParams.page;
}
}
fruit.html (ビュー)
Page: <a ng-click="previousPage()" ng-show="current_page > 1">Previous</a> {{current_page}} of {{total_pages}} <a ng-click="nextPage()" ng-show="current_page < total_pages">Next</a>
<div ng-repeat="fruit in fruits | startFrom:(current_page - 1)*per_page | limitTo:per_page">
{{fruit.name}} are {{fruit.color}}<br/>
</div>