当前位置: 首页 > 知识库问答 >
问题:

在两个组件之间共享数据,而不考虑父组件和子组件-角度2

云光明
2023-03-14

我一直在使用BehaviorSubject在组件之间共享数据。也就是说,相对url/文章属于ArticleComponent。然后是ArticlelistComponent中的/article/list,它包含一个带有文章细节列表的表。我面临的问题是,ngOnInit只能在页面重新加载时工作。最初,只有默认值{}反映在articlecomponent中,这只是我为BehaviorSubject设置的默认结果。当我单击table中的一行时,该数据不会在NgonInit中自动更新和订阅。旧值{}始终保留。我不确定将其放置在何处以使更改立即反映出来。请帮助解决。我的代码如下:

articleList.Component.ts

getSpecificDetail(value){
        this.articleService.getArticleDetail(value);
   }

article.service.ts

 public articledata=new BehaviorSubject<Object>({});
    currentdata=this.articledata.asObservable();
  getArticleDetail(data){         //data comes from articlelist.component
          return this.articledata.next(data);
    }

article.component.ts

 ngOnInit(){
    this.articleService.currentdata.subscribe(data=>{
    this.data=data;
    console.log(this.data);
    })
   }

编辑:我在Angular2:RXJS主题不响应事件中扩展了我的观察

共有1个答案

松英叡
2023-03-14

根据您对该数据的操作,在绑定到该数据的组件之间共享数据的另一种方法是利用Angular的更改检测,而不是使用您自己的BehaviorSubject

import { Injectable } from '@angular/core';

@Injectable() 
export class DataService {
  serviceData: string; 
}

我在这里有一篇关于它的博客文章:https://blogs.msmvps.com/deborahk/build-a-simple-angular-service-to-share-data/

这里有一个柱塞:https://plnkr.co/edit/kt4jlmpcwgbm2xdzqei9?p=preview

 类似资料:
  • 我正在学习通过教程在父组件和子组件之间传递数据。我仔细检查了我的代码,仍然没有找出错误。 我的index.js Home.js 按钮更改链接onClick事件正在调用changeLink函数,该函数将新链接传递给props。 错误:-

  • 寻找一种方法,使服务在必要时将最新数据提供给订阅的组件。例如:组件 3 将更改写入 API 以下是一些片段和一些描述,说明到目前为止我所做的工作: 该服务通过HTTP从API获取数据。组件1和组件2订阅了服务返回的observable:

  • 问题内容: 我正在开发使用Meteor和React作为视图引擎的应用程序 考虑下图: 从另一个示例反应隐藏组件 当触发C4按钮单击事件时,我需要更改C2组件状态。由于他们没有直接关系,因此我无法直接从C4进入C2状态。 另一个示例是从Component提交表单并获取在另一个Component中声明的数据(输入字段的值)。 我知道可以通过一些技巧来解决此问题(例如,流星会话,通过每个组件传递数据,基

  • 问题内容: 我需要在两个(或更多个)组合框之间共享数据,但是我想独立选择元素。例如,如果我在第一个comboBox中选择Object1,则我的第二个ComboBox也选择Object1,因为它们具有相同的模型(DefaultComboBoxModel,并且此模型还管理所选的对象)。但是我不想要这种行为。我想在我的comboBoxes中独立选择对象。当我在第一个comboBox中选择对象时,我的第二

  • 我有一个基于CssLayout的视图,它有一个预定义的最小宽度,但可以扩展以填充整个屏幕。这个视图,我们称之为父视图,在列表视图中有子视图。每个子级都是扩展HorizontalLayout的同一类的实例。 我有几个布局问题。 首先,由于封装垂直布局为每个孩子提供了一定百分比的空间,而不是允许他们根据自己的高度适当地分配空间,因此孩子们彼此重叠。VerticalLayout是必需的,因为当列表大于父

  • 在Angular 1.x.x中,您只需请求相同的服务,并以相同的实例结束,这使得在服务中共享数据成为可能。 现在在Angular 2中,我有了一个引用我的服务的组件。我可以读取和修改服务中的数据,这很好。当我试图在另一个组件中注入相同的服务时,似乎得到了一个新的实例。 我做错了什么?是模式本身有问题(使用服务共享数据)还是我需要将服务标记为单例(在应用程序的一个实例中)或其他? 我在 btw上 我