【问题标题】:How do you sync data between two browser tabs in angular2?如何在 angular2 中的两个浏览器选项卡之间同步数据?
【发布时间】:2017-05-02 12:21:06
【问题描述】:

我目前陷入这样一种情况,即我有 3 个不同的组件,其中一个在两个组件之间共享,如果我从两个组件中的任何一个更新共享组件,我希望它们同时更新它们是有办法吗?

ist-component

       import {Component,bind,CORE_DIRECTIVES,OnInit} from 'angular2/core';
import {MainComponent} from 'src/MainComponent';
@Component({
    selector: 'my-app',
    directives:[MainComponent],
    template: `<h1>AppComponent {{onMain}}</h1>
    <div *ngIf="onMain == false">
       Hello
      <br> __________________________________<br>
    </div>
     <app-share></app-share>


    })

export class FirstComponent implements OnInit {}

第二个组件

          import {Component,bind,CORE_DIRECTIVES} from 'angular2/core';
    import {SharedService} from 'src/shared.service';
    @Component({
        selector: 'sec-app',

        template: `<app-share></app-share>
                  <button (click)='changeCount()'></button>
`
    })

    export class SecondComponent {



        constructor(ss: SharedService) {
          this.ss = ss;
        }

        changeCount() {
          //want to change the count of shared component and also want a sync in first componen
        }
    }

共享组件

      import {Component,bind,CORE_DIRECTIVES} from 'angular2/core';
@Component({
    selector: 'app-share',

    template: `{{count}}`
})

export class ShareComponent {

   count:any;

}

现在两个组件都加载在不同的路径上,即带有两个选项卡的浏览器,一个选项卡具有第一个组件,第二个选项卡具有第二个组件,所以现在如果我更新第二个组件,我想要两个组件之间的同步必须反思第一个

【问题讨论】:

  • 共享是什么意思?它们之间的父子关系是什么?
  • 分享你目前尝试过的代码?
  • 我用你现在可以看到的代码更新了我的问题
  • 我猜问题必须是How do you sync data between two browser tabs in angular2?

标签: angular angular2-components


【解决方案1】:

使用其他两个组件中的“共享组件”只会共享代码,而不是数据。 IE。将创建两个“共享组件”实例,每个实例都有自己的一组变量。因此,一个组件中数据的更新不会反映在另一个组件中。这是设计使然。

如果您需要在任何两个组件之间共享数据,您需要使用 Observables。您需要通过声明一个 Observable 来创建一个拥有共享数据的服务。需要访问该共享数据的所有其他组件必须订阅服务中的 observable。

【讨论】:

  • 我已经尝试过这个解决方案,但是如果我们在浏览器的两个不同选项卡上,它不会共享数据,想要将数据从一个选项卡发送到第二个选项卡
  • 好吧,您在原始问题中没有提到“两个浏览器选项卡”的要求。如您所料,这会显着改变答案。在多个选项卡中打开有效地运行应用程序的单独副本,每个选项卡中都有一个。在应用程序的不同副本之间共享数据的正常方式是通过第三方数据存储,例如 cookie 或数据库。您的应用程序将“共享数据”写入数据库或 cookie,然后您的应用程序也会从中读取。但是,您必须通过一些后端代码(可能在 API 层中)自己管理读写。
猜你喜欢
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
相关资源
最近更新 更多