我试图摆脱我的ui-router网址中出现的#标签。 (http://localhost:3000/email不起作用,但http://localhost:3000/#email有效。经过搜索,我找不到适用于我的案例。我现在在本地跑,所以我假设我不需要任何"服务器配置"我在index.html中包含""
(function(angular) {
'use strict';
angular.module('myApp', ['ui.router'])
.controller('MainController', function($scope, $route, $routeParams, $location) {
$scope.$route = $route;
$scope.$location = $location;
$scope.$routeParams = $routeParams;
})
.config([
['$stateProvider', '$locationProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider, $locationProvider, $provide) {
$urlRouterProvider.otherwise('/email');
// PAGES
$stateProvider
.state('email', {
url: '/email',
templateUrl: '../pages/email.html',
controller: 'EmailController'
})
.state('about', {
url: '/about',
templateUrl: '../pages/about.html',
controller: 'AboutController'
})
// ... the rest...
$locationProvider
.html5Mode(true); // enable html5Mode for pushstate ('#'-less URLs DOESN'T WORK)
.hashPrefix('!');
$provide.decorator('$sniffer', function($delegate) {
$delegate.history = false;
return $delegate;
});
}]);
答案 0 :(得分:5)
您可以在运行块中执行此操作:
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
您的网址将从domain.com/#foo更改为domain.com/foo(这不需要明确的基础)。
...或者在你的跑步栏中这样做:
$locationProvider.html5Mode(true);
...然后将其添加到您的html <head>
:
<base href="/">
此解决方案提供与第一个相同的结果,但现在有一个指定的基础。
答案 1 :(得分:2)
也许试试这段代码?我认为可能是由于这些原因之一。
<head>
在<base href='/'>
标记中指定基本位置(或者可能是'/ email'?)angular.module('myApp',['ui.router'])
.controller('MainController', function ($scope, $route, $routeParams, $location) {
$scope.$route = $route;
$scope.$location = $location;
$scope.$routeParams = $routeParams;
})
.config(function ($stateProvider, $urlRouterProvider, $locationProvider, $provide) {
$urlRouterProvider.otherwise('/email');
// PAGES
$stateProvider
.state('email', {
url: '/email',
templateUrl: '../pages/email.html',
controller: 'EmailController'
})
.state('about', {
url: '/about',
templateUrl: '../pages/about.html',
controller: 'AboutController'
});
$locationProvider.html5Mode(true).hashPrefix('!');
$provide.decorator('$sniffer', function ($delegate) {
$delegate.history = false;
return $delegate;
});
});
道歉,我无法让代码示例表现出来。
答案 2 :(得分:1)
您是否在HTML文件中设置了与以下相同的基础:
<html>
<head>
<base href="/">
</head>
</html>
您应该在配置中删除.hashPrefix('!');
,因此此代码在此处相同:
$stateProvider
.state('email', {
url: '/email',
templateUrl: '../pages/email.html',
controller: 'EmailController'
})
.state('about', {
url: '/about',
templateUrl: '../pages/about.html',
controller: 'AboutController'
})
// ... the rest...
$locationProvider
.html5Mode(true); // enable html5Mode for pushstate ('#'-less URLs DOESN'T WORK)
$provide.decorator('$sniffer', function($delegate) {
$delegate.history = false;
return $delegate;
});
答案 3 :(得分:0)
您的应用配置将如下所示
app.config(function ($routeProvider,$locationProvider) {
$locationProvider.html5Mode(true);
$routeProvider
.when("/", {
templateUrl: 'url',
controller : 'mainController'
})
});
在页面标题中使用标记
<base href="abc.com/"/>
这可能会导致以下href出现问题,无法正确加载页面
<a href="abc.com/about">About Us</a>
要克服此问题,请在锚标记中使用target="_self"
,如下所示
<a href="abc.com/about" target="_self">About Us</a>