【发布时间】:2017-10-01 13:23:52
【问题描述】:
我有 2 个不相关的组件,navbar 和 edit-page
在navbar 组件中,我从集合中获取页面标题列表,并使用edit-page 组件编辑页面标题,但因为我总是可以看到来自navbar 组件的所有页面标题,我希望在编辑页面标题后立即更新它。
如何在没有 @input 和 @output 的情况下实现这一目标?据我了解,我应该创建某种共享服务,但我不知道该怎么做?
pages.service.ts
import { Http } from '@angular/http';
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';
@Injectable()
export class PagesService {
constructor(private http: Http) { }
getPages() {
return this.http.get('http://localhost:3000/pages')
.map(res => res.json());
}
getEditPage(id) {
return this.http.get('http://localhost:3000/pages/edit-page/' + id)
.map(res => res.json());
}
postEditPage(value) {
return this.http.post('http://localhost:3000/pages/edit-page/' + value.id, value)
.map(res => res.json());
}
}
导航栏组件
pages: any[];
ngOnInit() {
this.pagesService.getPages().subscribe(pages => {
this.pages = pages;
});
}
编辑页面组件
editPage({ value, valid }) {
if (valid) {
this.pagesService.postEditPage(value).subscribe(res => {
if (res == "ok") {
this.successMsg = true;
}
});
} else {
console.log('Form is not valid');
}
}
所以在edit-page 组件中执行editPage 方法后,我希望navbar 组件中的pages 属性自动更新。
【问题讨论】:
-
一个组件应该监听一个更新事件。
-
@RomanC 还有更多线索吗?我对 Angular 很陌生。
-
不用@input和@output也能做到吗?
-
如果您的父组件告诉孩子该做什么并且孩子应该回应父母已经完成的事情,那么它们是必不可少的。
标签: angular