2017-01-08 48 views
0

我已经在网上搜索了解如何在手动输入url(或页面刷新)时如何导航到Angular2中的特定组件。我找不到任何东西,除了beta2 angular2的实施几乎2岁(Such as here)。我有一个简单的使用node/express的角度web应用程序。获得客户端导航工作正常,但让客户端处理服务器请求我不知道这是如何工作,甚至如何实现。任何人都可以帮忙Angular2服务器url导航

我只是简单地做: http://localhost:3000/login - 这适用于在应用程序中导航,但是当我刷新它不起作用。我想如果简单地实现这一点,将会有大量的资源,但是我没有找到基本的东西。谢谢!

main.ts:

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 
import { LocationStrategy, HashLocationStrategy } from '@angular/common'; 
import { AppModule } from './app.module'; 

platformBrowserDynamic().bootstrapModule(AppModule); 

app.module.ts:

import { NgModule }  from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { RouterModule } from '@angular/router'; 

import { AppComponent } from './components/app.component'; 

import { LoginComponent } from './components/auth/login'; 
import { IndexComponent } from './components/home/index'; 

import { PageNotFoundComponent } from './components/not-found.component'; 


@NgModule({ 
    imports:  [ BrowserModule, 
    RouterModule.forRoot([ 
    { 
    path: 'login', 
    component: LoginComponent 
    }, 
    { 
    path: '', 
    component: IndexComponent 
    }, 
    { path: '**', component: PageNotFoundComponent } 
])], 
    declarations: [ AppComponent,IndexComponent,LoginComponent,PageNotFoundComponent ], 
    providers: [ ], 
    bootstrap: [ AppComponent ] 
}) 

export class AppModule { } 

回答

1

将是非常高兴看到您的服务器的路由器定义。

在浏览应用,但是当我刷新它不

你说什么工作的时候也能正常工作?您的服务器是否回复404状态码?

如果是这样,这里发生的事情:

  • 了解它们在localhost:3000:您的浏览器做一个GET请求/和index.html的返回给客户端。
  • 然后角开始和实例化您的默认组件,IndexComponent
  • 然后,单击指向本地主机链接:3000 /登录
  • 在这里,没有要求被到您的服务器,角度刚刚实例化正确的组件:LoginComponent
  • 如果刷新,您的浏览器会在localhost:3000/login上发出GET请求,这会给您一个404,因为此路由不存在。

解决您的问题,使用通配符,以满足您的文件:

app.get('*', (req, res) => { 
    res.status(200).sendFile(indexFile); 
}); 
0

你必须让所有的请求返回查看包含根Angular2应用标签。那么不管你的URL是什么,它都会加载相同的视图,并且它会让Angular2处理路由。

How to handle angular2 route path in Nodejs

0

您是否尝试过把你的index.html<header>部分是这样的:

<base href="/"> 

或有时它也需要:

<base href="/index.html">