全!我有这样一个组件,当我单击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属性内再次定义它.

Sample

该服务:

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相关问答推荐

RFDC.CommonJS或AMD依赖项可能会导致优化救助ANGURAL PROCEMENT with ngx-charts lib

Angular 客户端应用程序无法从停靠容器解析后端服务的地址

以17角表示的自定义元素

图像未显示在视图屏幕上-Angular 投影

更改动态表单控制Angular 的值

我正在try 将一个带有模块联盟的Angular 8项目expose 到另一个Angular 项目,Angular 是15,这可能吗?如果是这样,有什么建议吗?

RxJS轮询+使用退避策略重试

RXJS拆分返回值,多次调用后重新加入

如何检测 Angular Universal 预渲染版本?

Angular ngSubmit 不起作用(内部按钮和导入模块)

根据最后发出的 observable 创建一个 observable

在 kubernetes 上创建 Ingress 服务以将 springboot [后端] 连接到前端 [angular]

如何重置表单中的特定字段?

当父组件上的变量发生变化时重新加载子组件

如何手动延迟加载模块?

Angular 5 中 value 和 ngValue 的区别

如何在 Angular 应用程序中通过路由更改页面标题?

如何导航到同级路由?

如何在 Angular CLI 6: angular.json 中添加 Sass 编译?

Angular2/4 中的ng-reflect-*属性有什么作用?