Angular $routeProvider http://localhost/thisapp/ == 正常,http://localhost/thisapp/#/ == 错误。为什么?
Angular $routeProvider http://localhost/thisapp/ == ok, http://localhost/thisapp/#/ == error. Why?
我在使用 $routeProvider
时遇到了(尽管是小问题)。
http://localhost/thisapp/ works fine, and redirects to the .otherwise()
perfectly. But it seems that once the app is loaded and lands on the "home" url (http://localhost/thisapp/#/)
然后就坏了。
如果我导航到 http://localhost/thisapp the $location
resolves to http://localhost/thisapp/#/
如果我刷新(因为你知道用户会这样做),那么代码就会中断
我试过使用 $locationProvider
但这更令人困惑。似乎我读得越多,我就越困惑,因为记录的内容似乎不起作用。 (如果我取消注释下面的 $locationProvider
行,则不会生成任何内容)。我查看了 Whosebug 上的各种教程和问题,但没有像预期的那样工作。
这是我的配置代码:
myApp.config(function($routeProvider, $locationProvider) {
// commented cuz it's not working
// $locationProvider.html5Mode(true);
$routeProvider
.when('/', {
templateUrl: 'app2/components/templates/overview.html',
controller: 'overviewController'
})
.when('/all_overview', {
templateUrl: 'app2/components/templates/overview.html',
controller: 'overviewController'
})
.when('/all_procurement', {
templateUrl: 'app2/components/templates/procurement.html',
controller: 'procurementController'
})
.when('/all_social', {
templateUrl: 'app2/components/templates/social.html',
controller: 'socialController'
})
.when('/all_strengthening', {
templateUrl: 'app2/components/templates/strengthening.html',
controller: 'strengtheningController'
})
.when('/all_sales', {
templateUrl: 'app2/components/templates/sales.html',
controller: 'salesController'
})
// otherwise go to all_overview
.otherwise({
redirectTo: '/all_overview'
});
});
默认路由行为 (#
) 和尝试启用 html5 路由似乎给您带来了问题。尽管您尝试 .html5Mode(true)
,但较新版本的 AngularJS 具有 <base href />
的概念并且需要额外的步骤才能工作。
Before Angular 1.3 we didn't have this hard requirement and it was
easy to write apps that worked when deployed in the root context but
were broken when moved to a sub-context because in the sub-context all
absolute urls would resolve to the root context of the app. To prevent
this, use relative URLs throughout your app
为了说明相对 URL 的含义,这里有一个简单的示例...
<!-- wrong: -->
<a href="/userProfile">User Profile</a>
<!-- correct: -->
<a href="userProfile">User Profile</a>
因此,当您说 "nothing generates"(我猜是白屏?)时,检查您的浏览器控制台,您会发现以下错误
Uncaught Error: [$location:nobase]
有几种方法可以解决这个问题。您可以通过以下方式在您的应用中包含 <base href />
的概念
$locationProvider.html5Mode({
enabled: true
});
<html ng-app="app">
<head>
<base href="/">
</head>
...
或者您可以忽略此 <base>
标记并使用以下内容修改您的配置
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
有关该主题的更多信息,请参阅 Angular 文档
我在使用 $routeProvider
时遇到了(尽管是小问题)。
http://localhost/thisapp/ works fine, and redirects to the .otherwise()
perfectly. But it seems that once the app is loaded and lands on the "home" url (http://localhost/thisapp/#/)
然后就坏了。
如果我导航到 http://localhost/thisapp the $location
resolves to http://localhost/thisapp/#/
如果我刷新(因为你知道用户会这样做),那么代码就会中断
我试过使用 $locationProvider
但这更令人困惑。似乎我读得越多,我就越困惑,因为记录的内容似乎不起作用。 (如果我取消注释下面的 $locationProvider
行,则不会生成任何内容)。我查看了 Whosebug 上的各种教程和问题,但没有像预期的那样工作。
这是我的配置代码:
myApp.config(function($routeProvider, $locationProvider) {
// commented cuz it's not working
// $locationProvider.html5Mode(true);
$routeProvider
.when('/', {
templateUrl: 'app2/components/templates/overview.html',
controller: 'overviewController'
})
.when('/all_overview', {
templateUrl: 'app2/components/templates/overview.html',
controller: 'overviewController'
})
.when('/all_procurement', {
templateUrl: 'app2/components/templates/procurement.html',
controller: 'procurementController'
})
.when('/all_social', {
templateUrl: 'app2/components/templates/social.html',
controller: 'socialController'
})
.when('/all_strengthening', {
templateUrl: 'app2/components/templates/strengthening.html',
controller: 'strengtheningController'
})
.when('/all_sales', {
templateUrl: 'app2/components/templates/sales.html',
controller: 'salesController'
})
// otherwise go to all_overview
.otherwise({
redirectTo: '/all_overview'
});
});
默认路由行为 (#
) 和尝试启用 html5 路由似乎给您带来了问题。尽管您尝试 .html5Mode(true)
,但较新版本的 AngularJS 具有 <base href />
的概念并且需要额外的步骤才能工作。
Before Angular 1.3 we didn't have this hard requirement and it was easy to write apps that worked when deployed in the root context but were broken when moved to a sub-context because in the sub-context all absolute urls would resolve to the root context of the app. To prevent this, use relative URLs throughout your app
为了说明相对 URL 的含义,这里有一个简单的示例...
<!-- wrong: -->
<a href="/userProfile">User Profile</a>
<!-- correct: -->
<a href="userProfile">User Profile</a>
因此,当您说 "nothing generates"(我猜是白屏?)时,检查您的浏览器控制台,您会发现以下错误
Uncaught Error: [$location:nobase]
有几种方法可以解决这个问题。您可以通过以下方式在您的应用中包含 <base href />
的概念
$locationProvider.html5Mode({
enabled: true
});
<html ng-app="app">
<head>
<base href="/">
</head>
...
或者您可以忽略此 <base>
标记并使用以下内容修改您的配置
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
有关该主题的更多信息,请参阅 Angular 文档