Angular 给出了一个奇怪的模板 URL
Angular giving a weird templateURL
我正在尝试使用选定的 objectID 导航到另一个页面。
Angular 路由,
var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(function($routeProvider){
$routeProvider.when('/',{
controller: 'BooksController',
templateUrl: 'views/books.html'
})
.when('/books/details/:id',{
controller: 'BooksController',
templateUrl: 'views/book_details.html'
})
});
Angular 控制器:
var myApp = angular.module('myApp');
myApp.controller('BooksController', ['$scope', '$http', '$location', '$routeParams', function($scope, $http, $location, $routeParams){
console.log('BooksController loaded...');
// This To get request all the books: it works fine
$scope.getBooks = function(){
$http.get('/api/books').then(function(response){
$scope.books = response.data;
});
}
// This to get request a book with specific id it works fine
$scope.getBook = function(){
var id = $routeParams.id;
$http.get('/api/books/'+id).then(function(response){
$scope.book = response.data;
});
}
}]);
然后我有这个 html 页面,它也可以正常工作接受页面中的按钮,这个按钮应该给我一个干净的 templateUrl 导航到另一个 html 页面但它给了我奇怪 URL:
<div class="panel panel-default" ng-init="getBooks()">
<div class="panel-heading">
<h3 class="panel-title">Latest Books</h3>
</div>
<div class="panel-body">
<div class="row">
<div ng-repeat="book in books">
<div class="col-md-6">
<div class="col-md-6">
<h4>{{book.title}}</h4>
<p>{{book.description}}</p>
<a class="btn btn-primary" href="#/books/details/{{book._id}}">View Details</a>
</div>
<div class="col-md-6">
<img class="thumbnail" src="{{book.image_url}}">
</div>
</div>
</div>
</div>
</div>
一旦我按下按钮,我应该得到一个干净的 url,例如:
http://localhost:3000/#!/books/details/599701c1f3da51117535b9ab
但是我得到了这个url!
http://localhost:3000/#!/#%2Fbooks%2Fdetails%2F599701c1f3da51117535b9ab
好像你有 hashprefix !
,那么你的 URL 在 hash(#
)
之后也应该有 !
href="#!/books/details/{{book._id}}"
由于 Angular 1.6 hashprefix
默认为 !
,您可以通过将 hashPrefix
设置为 ''
(空白)来禁用此行为。
.config(['$locationProvider',
function($locationProvider) {
$locationProvider.hashPrefix('');
}
]);
这是因为您的 url 正在转换为代码。 %2f 表示一个 /.
您需要进行此配置才能避免 angular
的这种行为
myApp.config(['$locationProvider', function($locationProvider) {
$locationProvider.hashPrefix('');
}]);
您在 url 中有前缀,它正在转换为字符,即 url 编码。
因此,您需要通过将其值替换为 empty/blank string
来修复 $locationProvider 的 hashPrefix
属性
$locationProvider.hashPrefix('');
我正在尝试使用选定的 objectID 导航到另一个页面。 Angular 路由,
var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(function($routeProvider){
$routeProvider.when('/',{
controller: 'BooksController',
templateUrl: 'views/books.html'
})
.when('/books/details/:id',{
controller: 'BooksController',
templateUrl: 'views/book_details.html'
})
});
Angular 控制器:
var myApp = angular.module('myApp');
myApp.controller('BooksController', ['$scope', '$http', '$location', '$routeParams', function($scope, $http, $location, $routeParams){
console.log('BooksController loaded...');
// This To get request all the books: it works fine
$scope.getBooks = function(){
$http.get('/api/books').then(function(response){
$scope.books = response.data;
});
}
// This to get request a book with specific id it works fine
$scope.getBook = function(){
var id = $routeParams.id;
$http.get('/api/books/'+id).then(function(response){
$scope.book = response.data;
});
}
}]);
然后我有这个 html 页面,它也可以正常工作接受页面中的按钮,这个按钮应该给我一个干净的 templateUrl 导航到另一个 html 页面但它给了我奇怪 URL:
<div class="panel panel-default" ng-init="getBooks()">
<div class="panel-heading">
<h3 class="panel-title">Latest Books</h3>
</div>
<div class="panel-body">
<div class="row">
<div ng-repeat="book in books">
<div class="col-md-6">
<div class="col-md-6">
<h4>{{book.title}}</h4>
<p>{{book.description}}</p>
<a class="btn btn-primary" href="#/books/details/{{book._id}}">View Details</a>
</div>
<div class="col-md-6">
<img class="thumbnail" src="{{book.image_url}}">
</div>
</div>
</div>
</div>
</div>
一旦我按下按钮,我应该得到一个干净的 url,例如: http://localhost:3000/#!/books/details/599701c1f3da51117535b9ab 但是我得到了这个url! http://localhost:3000/#!/#%2Fbooks%2Fdetails%2F599701c1f3da51117535b9ab
好像你有 hashprefix !
,那么你的 URL 在 hash(#
)
!
href="#!/books/details/{{book._id}}"
由于 Angular 1.6 hashprefix
默认为 !
,您可以通过将 hashPrefix
设置为 ''
(空白)来禁用此行为。
.config(['$locationProvider',
function($locationProvider) {
$locationProvider.hashPrefix('');
}
]);
这是因为您的 url 正在转换为代码。 %2f 表示一个 /.
您需要进行此配置才能避免 angular
的这种行为myApp.config(['$locationProvider', function($locationProvider) {
$locationProvider.hashPrefix('');
}]);
您在 url 中有前缀,它正在转换为字符,即 url 编码。 因此,您需要通过将其值替换为 empty/blank string
来修复 $locationProvider 的hashPrefix
属性
$locationProvider.hashPrefix('');