如何正确设置 angular2 路由中的应用程序上下文路径?
How to set application context path in angular2 routing properly?
我使用 angular-cli(版本:1.0.0-beta.28.3)创建了一个 Angular 项目。我 运行 开发环境中的应用程序使用 "npm start" 并且应用程序 运行 在 "localhost:4200" 中很好。现在要复制生产部署,我想 运行 本地 WAMP 中的应用程序。所以,我 运行 'ng build -prod',将文件从 'dist' 文件夹复制到 WAMP 的 www/student 目录。现在,当我通过 WAMP 运行 项目时,我最终得到了这个错误:
显然,应用程序在错误的位置寻找所需的 js 文件。我做了一些研究,发现上下文根 - 在我的例子中 'student' 必须在 index.html 内的 "base href="/student" 中设置。由于 angular-cli's错误,每次我输入 'ng build -prod' 时,基本 href 都会重置为“/”。找到解决方法;输入 "ng build -prod --base-href student" 将基本 href 设置为学生。
现在我运行遇到了新的问题。默认页面应该显示路由 'app-home' 的内容,但启动应用程序给我:
但是,两条路线/链接都工作正常。例如,单击 'About Us' 会将 url 更改为“http://localhost:82/student/student/app-about-us”并显示适当的内容。
我很确定我的路由有问题。请帮助我以某种方式设置路由,以便我可以在'http://localhost:82/student'中使用子urls获取应用程序运行ning
'http://localhost:82/student/student/app-home'(默认)和'http://localhost:82/student/student/app-about-us'
app.modules.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { AboutUsComponent } from './about-us/about-us.component';
import { CarComponent } from './car/car.component';
import { MenuComponent } from './menu.component';
import { CONST_ROUTING } from "app/app.routing";
@NgModule({
declarations: [
AppComponent,
HomeComponent,
AboutUsComponent,
CarComponent,
MenuComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
CONST_ROUTING
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app.routing.ts
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from "app/home/home.component";
import { AboutUsComponent } from "app/about-us/about-us.component";
const MAINMENU_ROUTES: Routes = [
//full : makes sure the path is absolute path
{ path: '', redirectTo: '/app-home', pathMatch: 'full' },
{ path: 'app-home', component: HomeComponent },
{ path: 'app-about-us', component: AboutUsComponent }
];
export const CONST_ROUTING = RouterModule.forRoot(MAINMENU_ROUTES);
menu.component.html
<div class="row">
<div class="col-xs-12">
<ul class="nav nav-pills">
<li routerLinkActive="active"> <a [routerLink]="['/app-home']" >Home</a></li>
<li routerLinkActive="active"> <a [routerLink]="['/app-about-us']" >About Us</a></li>
</ul>
</div>
</div>
app.component.html
<app-menu></app-menu>
<router-outlet></router-outlet>
index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Ang2RouterTest</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root>Loading...</app-root>
</body>
</html>
使用此选项创建构建
ng build --base-href .
base href 无处不在。
参见我在 xampp 上托管的示例:
标准主机 - ng build --base-href http://www.yourwebsitehere.com/
。确保记住结尾的斜线
NodeJS 主机 - ng build
。不过请确保正确设置您的 NodeJS 服务器
我认为问题出在您的应用程序的上下文路径上。创建一个服务来获取您的应用程序的应用程序上下文并将此上下文路径附加到您的路由路径这将解决我猜想的问题。
我使用 angular-cli(版本:1.0.0-beta.28.3)创建了一个 Angular 项目。我 运行 开发环境中的应用程序使用 "npm start" 并且应用程序 运行 在 "localhost:4200" 中很好。现在要复制生产部署,我想 运行 本地 WAMP 中的应用程序。所以,我 运行 'ng build -prod',将文件从 'dist' 文件夹复制到 WAMP 的 www/student 目录。现在,当我通过 WAMP 运行 项目时,我最终得到了这个错误:
显然,应用程序在错误的位置寻找所需的 js 文件。我做了一些研究,发现上下文根 - 在我的例子中 'student' 必须在 index.html 内的 "base href="/student" 中设置。由于 angular-cli's错误,每次我输入 'ng build -prod' 时,基本 href 都会重置为“/”。找到解决方法;输入 "ng build -prod --base-href student" 将基本 href 设置为学生。
现在我运行遇到了新的问题。默认页面应该显示路由 'app-home' 的内容,但启动应用程序给我:
但是,两条路线/链接都工作正常。例如,单击 'About Us' 会将 url 更改为“http://localhost:82/student/student/app-about-us”并显示适当的内容。
我很确定我的路由有问题。请帮助我以某种方式设置路由,以便我可以在'http://localhost:82/student'中使用子urls获取应用程序运行ning 'http://localhost:82/student/student/app-home'(默认)和'http://localhost:82/student/student/app-about-us'
app.modules.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { AboutUsComponent } from './about-us/about-us.component';
import { CarComponent } from './car/car.component';
import { MenuComponent } from './menu.component';
import { CONST_ROUTING } from "app/app.routing";
@NgModule({
declarations: [
AppComponent,
HomeComponent,
AboutUsComponent,
CarComponent,
MenuComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
CONST_ROUTING
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app.routing.ts
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from "app/home/home.component";
import { AboutUsComponent } from "app/about-us/about-us.component";
const MAINMENU_ROUTES: Routes = [
//full : makes sure the path is absolute path
{ path: '', redirectTo: '/app-home', pathMatch: 'full' },
{ path: 'app-home', component: HomeComponent },
{ path: 'app-about-us', component: AboutUsComponent }
];
export const CONST_ROUTING = RouterModule.forRoot(MAINMENU_ROUTES);
menu.component.html
<div class="row">
<div class="col-xs-12">
<ul class="nav nav-pills">
<li routerLinkActive="active"> <a [routerLink]="['/app-home']" >Home</a></li>
<li routerLinkActive="active"> <a [routerLink]="['/app-about-us']" >About Us</a></li>
</ul>
</div>
</div>
app.component.html
<app-menu></app-menu>
<router-outlet></router-outlet>
index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Ang2RouterTest</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root>Loading...</app-root>
</body>
</html>
使用此选项创建构建
ng build --base-href .
base href 无处不在。
参见我在 xampp 上托管的示例:
标准主机 - ng build --base-href http://www.yourwebsitehere.com/
。确保记住结尾的斜线
NodeJS 主机 - ng build
。不过请确保正确设置您的 NodeJS 服务器
我认为问题出在您的应用程序的上下文路径上。创建一个服务来获取您的应用程序的应用程序上下文并将此上下文路径附加到您的路由路径这将解决我猜想的问题。