2017-02-21 51 views
7

Wszystko działa poprawnie, gdy buduję linki i poruszam się w aplikacji, ale wpisywanie w pasku adresu nie działa! Ostatecznie chcę móc wysłać link do konkretnej strony/ścieżki aplikacji pocztą elektroniczną i nie jestem pewien, jak to osiągnąć.Angline 2.0 deep-linking nie działa. To samo z paska adresu.

Podążyłem za angular router guide documentation. Poprawnie myślę ...

Używam NodeJS (z ekspresowym) i na serwerze przekierowałem cały ruch do katalogu głównego aplikacji.

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

W moim index.html Mam ustawiony bazowej

<base href="/"> 

mam moje szlaki klienta/ścieżki ustawione następująco

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

Gdybym wpisać http://localhost:8080/vendors w pasku adresu przeglądarki I dostać się do http://localhost:8080/vendor/registration, co ma sens, ponieważ tam serwer wysyła do przeglądarki polecenie przekierowania.

Jak powinienem utworzyć precyzyjny link do mojej aplikacji?

Edytuj. Samouczek kątowy - "TOUR OF HEROES" - również wykazuje takie samo zachowanie. tzn. bezpośrednie wprowadzanie adresów URL w pasku adresu przeglądarki nie działa. Aplikacja pokazuje tekst "ładowanie ..." i nie kieruje się do kontrolera.

+0

Co masz na myśli przez głębokie powiązanie? Czego się spodziewałeś? – echonax

+0

Chcę mieć możliwość wysyłania użytkownikom linków e-mail, takich jak http://www.example.com/vendors, i do wyświetlania odpowiedniego widoku/kontrolera (zamiast elementu głównego). – nsof

+0

Jaki jest twój kod dla ' app.get ('/', function (req, res) {/ * what here * /}) ' – idbehold

Odpowiedz

1

Odpowiedź na Twoje pytanie jest jednoznacznie opisać w angular2 documentation

+0

Dzięki. Z jakiegoś powodu nie jest to wspomniane ani wymienione w [link] (https://angular.io/docs/ts/latest/guide/router.html). Co więcej, faktycznie próbowałem tego, ale odwołałem się do niewłaściwego 'index.html', zamiast tego w folderze'/dist' odwołuję się do tego z folderu '/ src'. – nsof

2

Ogólnie nie trzeba przekierowywać na serwerze, ponieważ wszystkie trasy są obsługiwane przez kątowy router na kliencie.

Zamiast tego, aby Twoja ekspresowa trasa typu catch-all po prostu zawsze służyła Twoim index.html dla wszystkich żądanych adresów URL. Po uruchomieniu aplikacji klienckiej, kątowy zajmie się routingiem do odpowiedniego komponentu na podstawie żądanego adresu URL. Upewnij się, że przechowujesz swój tag <base href="/">, dzięki czemu kąt może być świadomi, jaka część adresu URL jest kierowana.

const path = require('path'); 

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

Ten działał dla mnie z następującą ** ważną uwagą **: Plik 'index.html', który jest wysyłany do klienta, powinien znajdować się w folderze'/dist', a nie w oryginale '/ folder src'. (przynajmniej dla projektów węzłów + ekspresowych z domyślną konfiguracją) 'var indexFile = path.join (__ nazwa_irunku," dist/index.html "); res.sendFile (indexFile);' – nsof