2016-03-31 3 views
2

Беллоу структураAngular2 маршрутизации с помощью кнопки задней

app.component 
/posts/posts.component 
/shared/shared.component 
/shared/gallery.component 

под app.component, у меня

@RouteConfig([ 
    { path: './shared/...', name: 'Shared', component: SharedComponent }, 
    { path: './posts/...', name: 'Posts', component: PostsComponent} 
]) 

под posts.component, у меня есть

@RouteConfig([ 
{ path: '/', name: 'PostList', component: PostListComponent, useAsDefault: true }, 
{ path: '/:id', name: 'PostDetail', component: PostDetailComponent }, 
{ path: '/:id/gallery', name: 'Gallery', component: GalleryComponent } 

])

под gallery.component, я

import {Component, Input} from 'angular2/core'; 
import {Router} from 'angular2/router'; 

import {Photo} from './photo'; 
import {GalleryService} from './gallery.service'; 

@Component({ 
    selector: 'my-gallery', 
    template: ` 
<my-photo *ngFor="#item of items" [style.backgroundImage]="'url(' + item.thumb + ')'"></my-photo> 
    ` 
}) 

export class GalleryComponent { 
    @Input() items; 

    constructor(private _galleryService: GalleryService) { 
     if (this._galleryService.get()) { 
      this.items = this._galleryService.get(); 
     } 
    } 
} 

Проблема заключается в том, что я могу перейти в галерею (от http://server/posts/123 до http://server/posts/123/gallery) в порядке, но когда я нажимаю браузер кнопку назад, даже если URL не меняется обратно, ничего в изменении видового экрана, моя галерея не удаляется, а my-post не загружается.

Если я переключусь на HashLocationStrategy, кнопка «Назад» работает, но я бы предпочел не перейти на это.

+0

Получено сообщение об ошибке в консоли браузера? –

+0

Нет, ошибок нет. – Stone

+1

Можете ли вы воспроизвести проблему в plunkr? – dfsq

ответ

0

Вы не указали браузер, который используете, но это типичная проблема в Safari, где он загружает сохраненную/кэшированную версию страницы, но не создает javascript так же, как другие браузеры.

Я не могу говорить о новом маршрутизаторе rc1, поскольку я его не тестировал, но вы можете решить эту проблему со старой версией router-deprecated, используя следующее в своем основном компоненте приложения. Это больше подходит для работы и не предназначено для долгосрочного использования, так как эта проблема наверняка будет исправлена ​​в ng2, приближаясь к ее правильному выпуску.

constructor(_router:Router, 
      _applicationRef: ApplicationRef) { 
    _router.subscribe((uri)=> { 
     if (Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0) { 
      // We appear to be using Safari... 
      _applicationRef.zone.run(() => _applicationRef.tick()); 
     } 
    }); 
} 

Проблема с этим кодом является то, что он срабатывает при каждом изменении состояния означает, что мы, вероятно, заставляя браузер, чтобы сделать больше, чем он должен, но, как я сказал, думать об этом как короткий срок исправить.

Смежные вопросы