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.forRoot
in 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 次 |
最近记录: |