Angular 2 - 什么相当于根范围?

标签 angular

全部!我有这个组件,当我点击 href 时,如果它是像这样的 Angular 1,它应该将一个变量设置为 Root Scope:

selector: 'my-component'
template : `
            <div (click)="addTag(1, 'abc')">`

constructor() {
    this.addTag = function(id, desc){
        myGlobalVar = { a: id, b: desc};
    };

然后在我的父组件中,页面本身(实际上)我应该做类似的事情:

<my-component></my-component>
<p>My Component is returning me {{ ?????? }}

做这样的事情的最佳方法是什么?

最佳答案

要实现全局变量,您可以实现共享服务。您将能够将数据保存在其中,并且所有组件都可以访问它们。

为此,只需实现一个服务并在引导您的应用程序时设置其提供者:

bootstrap(AppComponent, [ MySharedService ]);

注意不要在要使用它的组件的 providers 属性中再次定义它。

示例

服务:

export class MySharedService {
  data: any;
  dataChange: Observable<any>;

  constructor() {
    this.dataChange = new Observable((observer:Observer) {
      this.dataChangeObserver = observer;
    });
  }

  setData(data:any) {
    this.data = data;
    this.dataChangeObserver.next(this.data);
  }
}

在组件中使用它:

@Component({
  (...)
})
export class MyComponent {
  constructor(private service:MySharedService) {
  }

  setData() {
    this.service.setData({ attr: 'some value' });
  }
}

如果您想通知组件数据已更新,您可以将可观察字段用于共享服务:

@Component({
  (...)
})
export class MyComponent {
  constructor(private service:MySharedService) {
    this.service.dataChange.subscribe((data) => {
      this.data = data;
    });
  }
}

有关详细信息,请参阅此问题:

angular.io 网站上的这个页面也可能会让您感兴趣:

关于Angular 2 - 什么相当于根范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35985009/

相关文章:

angular - 如何动态设置Web组件的ViewEncapsulation?

angular - 加载组件时如何在 Angular 垫选择中设置值?

angular - Storybook Angular NX 工作区 : How to publish using Chromatic?

javascript - 以 Angular 2将图像转换为base64

angular - AG-grid只显示11条记录并在设备宽度变化时更新?

Angular 2将相同的点击事件绑定(bind)到多个元素

java - 部署 Angular 5 Spring Boot 多模块项目-jar

javascript - 如何在点击动画时更改 Angular 中的 css 样式

javascript - 从组件调用的 Angular 4 指令的多个实例弄乱了输入值

angular - 在 Angular 2 中的 @ngModule 中声明多个组件