角度可观察属性 - 最佳实践

  • 本文关键字:最佳 属性 观察 angular
  • 更新时间 :
  • 英文 :


我想知道在 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>

最新更新