我想知道在 Angular 4+ 中实现可观察属性的最佳实践。
该文档显示了具有Subject<x>
和Observeable<x>
的解决方案: https://angular.io/guide/component-interaction
但我想要的只是服务中的一个属性,我可以绑定到多个组件并最终得到这样的结果:
public _foobar: any;
@Input()
public set foobar(val: any) {
this._foobar = val;
this.foobarChange.emit(val);
}
public get foobar(): any {
return this._foobar;
}
@Output()
public foobarChange: EventEmitter<any> = new EventEmitter<any>();
与[(ngModel)]="service.foobar"
绑定效果很好。
现在的问题是:
- 这是不好的做法吗? 为什么
- ?或者为什么它没有像这样显示在文档中。
- 在主题/可观察方法上有什么更好的?
我只是感到困惑,确定我是否可以依靠这个。
亲切问候 格雷戈尔
编辑:
好吧,忽略吸气器/设置器更容易(我只是在我的特定情况下需要它(,但它在没有的情况下工作正常:
@Input() foobar: any;
@Output() foobarChange = new EventEmitter<any>();
在父组件和子组件之间共享数据的最佳做法是使用 @Input 和 @Output
当您需要使用服务进行共享时。您需要使用主题或行为主题
服务示例
@Injectable()
export class MyService {
private data: BehaviorSubject<MyData> = new BehaviorSubject(null);
getData(): Observable<MyData> {
return this.data;
}
setData(d: MyData): void {
this.data.next(d);
}
}
在组件中使用
public data: Observable<MyData>;
constructor(private myService: MyService) {}
ngOnInit() {
this.data = this.myService.getData();
}
在模板中使用
<div>{{data|async}}</div>