如何在Angular中获取外部世界的输入和提升事件?

问题描述 投票:0回答:1

我想知道如何从外部世界获得输入并引发冒泡到外部世界的自定义事件(即在角度组件之外)。我明白我不能在根组件中获得@Input()。那我该怎么做呢:

  1. 将一个对象数组(比如T[])从角度外部传递给我的Angular组件<app-root>
  2. <app-grandchild>举起一个事件,使得事件从角度成分中冒出来并击中DOM树根或<body>

假设以下DOM层次结构:

<body>
  <app-root>
    <app-child>
      <app-grandchild></app-grandchild>
    </app-child>
  </app-root>
</body>
javascript angular typescript
1个回答
0
投票

您的问题需要解释Angular中的几个概念:组件交互和内容投影​​。

我汇总了一个结合两者的例子,以满足您在问题中描述的内容:

@Component({
  selector: 'app-child',
  template: `
  <ul>
      <li *ngFor="let obj of arrayOfObjects"> {{ obj.id }} </li>
  </ul>
  <ng-content></ng-content>
  `,
})
class AppChildComponent {
    @Input() arrayOfObjects: object[];
}

@Component({
  selector: 'app-grandchild',
  template: `Am the grandchild!`,
})
class AppGrandChildComponent implements OnInit {
    @Output() somethingHappened = new EventEmitter<string>();

  ngOnInit(){
    this.somethingHappened.emit('yellow');
  }
}


@Component({
  selector: 'app-root',
  template: `
    <app-child [arrayOfObjects]="[
      {id: '123'},
      {id: '456'}
    ]">
        <app-grandchild 
          (somethingHappened)="handleSomething($event)">
        </app-grandchild>
    </app-child>
  `,
})
class AppComponent {
    handleSomething(event){
    document.body.style.backgroundColor = event;
  }
}

这里有完整的例子:https://jsfiddle.net/c945j08v/1/

我强烈建议您阅读有关Angular Docs&Blog的更多信息。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.