kin*_*_ru 36 npm angular2-template angular2-routing angular-cli angular
我将开发一个简单的Angular 2应用程序.我使用Angular CLI创建了一个带路由的项目,并使用'ng generate component'命令向应用添加了几个组件.然后我在app-routing.module.ts中指定了路由,如下所示.
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
import { UserComponent } from './user/user.component';
import { ErrorComponent } from './error/error.component';
import { SpecialpageComponent } from './specialpage/specialpage.component';
const routes: Routes = [
{
path: '',
component: HomeComponent
},
{
path: 'about',
component: AboutComponent
},
{
path: 'user',
component: UserComponent
},
{
path: 'specialpage',
component: SpecialpageComponent
},
{
path: '**',
component: ErrorComponent
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule],
providers: []
})
export class AppRoutingModule { }
app.module.ts如下.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
import { ErrorComponent } from './error/error.component';
import { UserComponent } from './user/user.component';
import { SpecialpageComponent } from './specialpage/specialpage.component';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
AboutComponent,
ErrorComponent,
UserComponent,
SpecialpageComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
我没有为其他组件添加任何修改.然后我使用'ng serve'命令部署应用程序,该应用程序与链接正常工作.例如:http:// localhost:4200/about
但是当我在http-server中部署项目时,链接无法按预期工作.我使用'http-server ./dist'命令部署应用程序,应用程序部署正常,但链接不起作用.当我转到' http:// localhost:4200/about '时,它会出现404错误.
我做错了吗?为什么'ng-serve'工作和'http-server'不起作用?
任何帮助,将不胜感激.提前致谢.
我已将我的项目上传到github.
Man*_*anu 27
通过实现HashLocationStrategy添加#到您的所有路由来解决此问题.你通过添加来实现这一点HashLocationStrategy to AppModule providers.
providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}],
Run Code Online (Sandbox Code Playgroud)
并添加相应的导入
import { HashLocationStrategy, LocationStrategy } from '@angular/common';
Run Code Online (Sandbox Code Playgroud)
这将解决您的问题.
如果您不想使用HashLocationStrategy,则可以使用PahtLocationStrategy,因此您的Angular应用程序不会在URL中显示Hash.有关它的更多详细信息,请查看官方链接:https://angular.io/api/common/PathLocationStrategy
小智 7
我已通过在AppModule Providers中添加以下代码解决了此问题:
providers: [{provide: LocationStrategy, useClass: PathLocationStrategy}]
Run Code Online (Sandbox Code Playgroud)
和导入
import { PathLocationStrategy, LocationStrategy } from '@angular/common';
Run Code Online (Sandbox Code Playgroud)
然后我创建了.htaccess:
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
Run Code Online (Sandbox Code Playgroud)
网址中没有#的情况下一切正常
它会发生,因为它会找到一个关于哪个页面根本不在里面的页面因此404.可能的选项:
如果你想使用http-server,那么使用一个代理,它会将所有内容重定向到http:// localhost:your-port.
选项:
-P或将--proxy所有无法在本地解析的请求代理到给定的URL.例如:-P http://someurl.com
根本不要使用快递.使用快速创建自己的http服务器并将所有内容重定向到index.html
假设公共是你的文件夹,你保留所有转换的东西.
var express = require('express');
var app = express();
var path = __dirname + '/public';
var port = 8080;
app.use(express.static(path));
app.get('*', function(req, res) {
res.sendFile(path + '/index.html');
});
app.listen(port);
Run Code Online (Sandbox Code Playgroud)它将通过以下方式解决:
情况1:适用于低于Angular 5.1的版本
1)使用如下所述的HashLocationStrategy:在AppModule中执行以下操作。
1.1) import { HashLocationStrategy, LocationStrategy } from '@angular/common';
1.2) providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}]
情况2:适用于等于或大于Angular 5.1的版本
2.1)Angular在SameUrlNavigation上引入了此属性,以克服服务器上的刷新问题。
2.2)将onSameUrlNavigation添加 到RouterModule.forRootin imports数组中。
a)在应用程序主路由模块中,即app.routing.module.ts / app.routing.ts添加属性
见下文:
@ngModule({
imports:
[
RouterModule.forRoot(routes, {onSameUrlNavigation: ‘reload’})
],
exports: [RouterModule],
});
Run Code Online (Sandbox Code Playgroud)
希望它能帮助到别人。
| 归档时间: |
|
| 查看次数: |
29609 次 |
| 最近记录: |