2017-01-04 3 views
0

Недавно я сделал пример приложения с некоторыми функциями, такими как: добавление сообщений, добавление комментариев к этим сообщениям, отображение списка сообщений. Теперь я хочу добавить метод удаления сообщения.Angular2 не освежающий родитель после удаления ребенка

Моя проблема заключается в том, что после удаления сообщения и возврата к списку сообщений список сообщений не обновляется. Удаленная почта все еще существует.

Я добавил метод renavigate для обновления страницы, но эта штука загружается так долго! Это похоже на 1-2s для просмотра списка.

Как просмотреть обновленный компонент без активированного обновления вручную на renavigate?

Моя кнопка в компоненте шаблона - /blog список сообщений компонента:

<a [routerLink]="['/blog']" routerLinkActive="active" 
      (click)="remove(blog.id); renavigate();" 
      class="btn btn-1 btn-1e">Delete Post</a> 

Остальной шаблона компонента:

<div *ngIf="isLoading"> 
    Loading&hellip; 
</div> 

<div *ngIf="error"> 
    Something went wrong! 
</div> 

<article *ngIf="blog" class="post"> 
    <header> 
     <h2>{{ blog.id }}\ {{ blog?.title }}</h2> 
    </header> 
    <section class="article__content"> 
     {{ blog?.text }} 
     <p class="author"> {{ blog?.name }}</p> 
    </section> 
    <footer> 
     <a [routerLink]="['/blog']" routerLinkActive="active" class="btn btn-1 btn-1e">Return</a> 
     <a [routerLink]="['/blog']" routerLinkActive="active" 
      (click)="remove(blog.id);" 
      class="btn btn-1 btn-1e">Delete Post</a> 

    </footer> 

    <my-comment [blogId]="blog.id"></my-comment> 
    </article> 

Удалить в компоненте:

remove(id: number): void { 
     console.log(id); 
     this.blogService.delete(id) 
    } 

Service удалить функция:

public delete(id: number): Promise<void> { 
     const url = `http://localhost:3000/posts/${id}`; 
     return this.http.delete(url, {headers: this.headers}) 
      .toPromise() 
      .then(() => null) 
    } 

шаблон компонента после соответствующего списка:

<article *ngFor="let post of blogPosts"> 
     <div> 
     <p>{{ post.id}}</p> 
    <h2 class="cl-effect-21"><a [routerLink]="['/posts', post.id]"> 
     {{ post.title }}</a></h2> 
      </div> 
     <div class="border"> 
    <h5 class="date">[{{ post.date }}]</h5>, <h4>{{ post.name }}</h4> 
      </div> 
    </article> 

Отредактировано: Я понимаю, что проблема с кэшем HTTP Chrome. В Firefox сообщение удаляется после возврата на страницу компонента после списка. Chrome не получает новый HTTP-запрос и отображает «старый» пост-список. Страница должна быть обновлена, чтобы просмотреть обновленный компонент после списка.

Как устранить эту проблему в угловом?

+0

Не могли бы вы добавить свой компонент HTML код ? –

+0

почему бы вам не получить результат от вашего удаления ... а затем в обещании назвать маршрутизацию в oher? –

+1

не похоже, что вы удаляете сторону почтового клиента – raj

ответ

1

Ваша проблема в том, что вы «переименовываете» перед вызовом вашего запроса DELETE.

Вы можете добавить «последующую навигацию» после того, как ваше обещание в вашем «удалить» метод:

remove(id: number): void { 
    this.blogService.delete(id).then(() => this.renavigate()); 
} 

А затем измените услугу, как следующее:

public delete(id: number): Promise<Response> { 
    const url = `http://localhost:3000/posts/${id}`; 
    return this.http.delete(url, {headers: this.headers}) 
     .toPromise()) 
} 
+0

О, извините, я добавил остальную часть шаблона. Пост-список является родителем текущего компонента. Итерации нет, удаление внутри компонента, и я хочу перейти вверх к родительскому компоненту и увидеть обновленный список без удаленной (как я вижу сейчас без функции «renavigate»). – Ula

+0

Выскакивает ошибка: 'Свойство 'splice' не существует в типе 'BlogComponent' .' – Ula

+0

И у меня нет массива сообщений, только компонент для отображения его списка. – Ula

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