Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用服务在组件之间共享数据是一种糟糕的方法吗_Angular - Fatal编程技术网

Angular 使用服务在组件之间共享数据是一种糟糕的方法吗

Angular 使用服务在组件之间共享数据是一种糟糕的方法吗,angular,Angular,我有两个组件,假设“A”是父组件,“B”是子组件。目前,在我的应用程序中,如果我有一个用于共享数据的父子关系,我会通过输入将数据传递给子对象。但是需求突然改变,“B”组件将不再是“a”的子组件,而是它的兄弟。“B”组件仍然依赖于“A”组件数据。当我移动组件B时,我做了以下更改: 早期组件“A”没有输出事件发射器。现在我有了输出事件,它向父级发送数据。 公共父级通过输入将组件“A”发出的数据传递给“B”。 我的问题是:如果我在使用服务的组件之间共享数据,即使它们具有父子关系,这会是一种糟糕的方法吗

我有两个组件,假设“A”是父组件,“B”是子组件。目前,在我的应用程序中,如果我有一个用于共享数据的父子关系,我会通过输入将数据传递给子对象。但是需求突然改变,“B”组件将不再是“a”的子组件,而是它的兄弟。“B”组件仍然依赖于“A”组件数据。当我移动组件B时,我做了以下更改:

早期组件“A”没有输出事件发射器。现在我有了输出事件,它向父级发送数据。 公共父级通过输入将组件“A”发出的数据传递给“B”。
我的问题是:如果我在使用服务的组件之间共享数据,即使它们具有父子关系,这会是一种糟糕的方法吗。即使组件关系发生变化,我也不必担心传递数据。

通常,这是一种非常好的方法。 唯一让您感到麻烦的是同步。 无论出于何种原因,如果组件“A”和“B”同时打开,并且它们在服务中操作相同的数据,则需要将该更改通知其他组件

我经常看到的一种典型方法如下所示:

@Injectable()
export class DataShareService {
  private _data: Subject<MyDataStructure>;
  data$: Observable<MyDataStructure> = this._data.asObservable();

  changeDataTo(changedData: MyDataStructure) {
    this._data.next(changedData);
  }
}

并让“A”和“B”订阅数据$。通过这种方式,任何更改都会对数据进行更新,服务本身负责数据的通信方式,仅此而已,在我看来,这完全反映了它的工作。

绝对不是。根据您的要求。当数量较少时,您可以使用服务方法,对于较大的数据量,请使用redux谢谢@Aravin您是否需要更详细的信息或回答?在您确认这不会是一个坏的选择后,我现在清楚地知道该方法。好的。谢谢