Używam wersji beta programu Angular 2 i mam problem z routingiem. Oto co mamHashLocationStrategy nie generuje # lokalizacji podczas routingu?
AppComponent:
import {Component, provide} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {FORM_DIRECTIVES, CORE_DIRECTIVES} from 'angular2/common';
import {Http, Response, HTTP_PROVIDERS} from 'angular2/http';
import {RouteConfig, Location, LocationStrategy, HashLocationStrategy, ROUTER_DIRECTIVES, ROUTER_PROVIDERS} from 'angular2/router';
import {HomeComponent} from './components/home';
import {RowsComponent} from './components/rows';
import {ColumnsComponent} from './components/columns';
import {TableComponent} from './components/table';
@Component({
selector: 'app',
directives: [FORM_DIRECTIVES, CORE_DIRECTIVES, ROUTER_DIRECTIVES],
templateUrl: '/app/views/root.html',
providers: [ROUTER_PROVIDERS]
})
@RouteConfig([
{path:'/', name: 'Home', component: HomeComponent},
{path:'Rows', name: 'Rows', component: RowsComponent},
{path:'Columns', name: 'Columns', component: ColumnsComponent},
{path:'Table', name: 'Table', component: TableComponent}
])
class AppComponent {
public title = 'Responsive Layout';
public SelectedTab = 'Home';
constructor(location: Location) {
//location.go('Rows');
}
}
bootstrap(AppComponent, [
ROUTER_PROVIDERS,
provide(LocationStrategy, {useClass: HashLocationStrategy})
]);
Każdy poradnik i odniesienie API wydaje się wskazywać na mnie robi to tylko jak mam powyżej. Mam także <base href="/app/" />
w nagłówku mojego pliku index.html. Oto moja instrukcja routingu zachowując się tak, jak powinna. Nie otrzymuję błędów. Kiedy klikam jeden z tych wpisów w pasku początkowym bootstrap, widzę, że widoki się wyłączyły i wyświetlają odpowiednie szablony oraz że ich Komponenty są uruchomione i są powiązane. Jednak mimo użycia HashLocationStrategy
w moim zgłoszeniu bootstrap(...)
, adresy URL są nadal "Styl HTML5": localhost:8080/app/Rows
, kiedy powinno być localhost:8080/app/#/Rows
.
Wydaje mi się, że muszę używać starego stylu opartego na #, jeśli chcę, aby moi użytkownicy mogli utworzyć zakładkę konkretnego widoku i wrócić do niego. Jeśli pozwolę na /app/Rows
, odświeżenie strony spowoduje 404, ponieważ Rows
nie istnieje w folderze app
.
Tak, usunięcie dostawcy naprawiło to. Nie jestem pewien, dlaczego, ale to miało znaczenie. –
tutaj, usunięto router_providers z komponentu wykonującego routerLink. Wydaje się, że Router_providers to tylko zastosowania w komponencie bootstrap. – longday