2017-02-21 51 views
7

當我在應用中構建和導航鏈接時,一切正常,但在地址欄中輸入卻不行! 最終,我希望能夠通過電子郵件發送指向特定應用程序頁面/路徑的鏈接,但我不確定如何完成此操作。我已按照angular router guide documentation。正確的,我認爲...Angular 2.0深度鏈接不起作用。地址欄中相同

我使用NodeJS(與快遞),並在服務器中我已重定向到應用程序根的所有流量。

app.get("*", function(req, res) { 
    console.error("in get *") 
    res.redirect("/"); 
}); 

以我的index.html我已經設置基地

<base href="/"> 

我有我的客戶擊潰/路徑如下

const appRoutes: Routes = [ 
    { path: 'vendor/registration', component: VendorRegistrationComponent }, 
    { path: 'vendors', component: VendorListComponent }, 
    { path: '', redirectTo: 'vendor/registration', pathMatch: 'full' }, 
    { path: '**', component: PageNotFoundComponent }  
]; 

如果我在瀏覽器的地址欄I型http://localhost:8080/vendors設置得到http://localhost:8080/vendor/registration哪種是有道理的,因爲這是服務器告訴瀏覽器重定向到的地方。

那麼我應該如何深入鏈接到我的應用程序?

編輯。 Angular教程 - 「英雄之旅」 - 也表現出相同的行爲。即直接在瀏覽器的地址欄中輸入網址不起作用。該應用程序顯示一個「加載...」文本,並不會路由到控制器。

+0

明確地描述你的深層鏈接意思?你期望得到什麼? – echonax

+0

我想要的是能夠向用戶發送電子郵件鏈接,例如http://www.example.com/vendors,並顯示正確的視圖/控制器(而不是根元素) – nsof

+0

你的代碼是什麼? app.get('/',function(req,res){/ * what's here * /})' – idbehold

回答

1

你的問題的回答在angular2 documentation

+0

謝謝。由於某些原因,這未在[link](https://angular.io/docs/ts/latest/guide/router.html)中引用或提及。 此外,我實際上嘗試過,但引用了錯誤的'index.html',而不是'/ dist'文件夾中的一個,我引用'/ src'文件夾中的一個。 – nsof

2

通常,您不需要在服務器上重定向,因爲您的所有路由都由客戶端上的角路由器處理。

取而代之的是讓您的所有快速路線始終爲您所有請求的網址提供index.html。當客戶端應用程序引導時,angular會根據請求的url來照顧到適當的組件。請務必保留您的<base href="/">標籤,以便角度可以知道url的哪部分路由。

const path = require('path'); 

app.get("*", function(req, res) { 
    res.sendFile(path.join(__dirname, '/path/to/your/index.html')); 
}); 
+0

這終於對我有以下**重要提示**:發送到客戶端的'index.html'文件應該位於'/ dist'文件夾中,而不是原來'/ src'文件夾。 (至少對於具有默認設置的節點+快捷項目) 'var indexFile = path.join(__ dirname,「dist/index.html」); res.sendFile(indexFile);' – nsof