首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将可观察到的信息输入到有角度的web组件中

如何将可观察到的信息输入到有角度的web组件中
EN

Stack Overflow用户
提问于 2020-09-07 14:43:55
回答 2查看 1.6K关注 0票数 2

请注意,这个问题不是关于正则角分量的。我特别询问的是一个可重用的自定义元素,它是用角创建的,也称为角web组件。

我有一个可重用的角10 web组件托管在另一个角10 web应用程序。使用以破折号分隔的小写(即我的数据)的属性名,我能够将字符串输入到具有@输入和较低camel大小写(即myData)的角web组件中。

主机应用程序的标记中有以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<my-custom-element my-data="test"></my-custom-element>

可重用的WEB组件-我的自定义元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Input() myData: string;

该字符串工作良好,并确实被传递到web组件中。现在,如何将可观察到的信息传递给web组件?示例(这不起作用,因为它将"“中的内容作为文字字符串使用)。

主机应用程序标记:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<my-custom-element 
    my-data="test"
    fetch-event="eventsSubject.asObservable()"
></my-custom-element>

主机应用程序组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eventsSubject: Subject<void> = new Subject<void>();

 handleButtonClick(event: any): void {
   this.eventsSubject.next();
}

可重用的WEB组件-我的自定义元素:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Input() myData: string;
@Input() fetchEvent: Observable<void>;

我还尝试了以下也不起作用的方法: fetch-event="eventsSubject.asObservable()“

如果使用@Input传递一个可观察到角度的web组件并不是这样做的,请告诉我。我也试过this.elRef.nativeElement.attributes['fetchEvent'].value,它也不适合我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-09 10:23:09

经过大量的研究和发现,我们无法通过@Input将复杂的数据传递到角度Web组件中,到目前为止,这就是我所做的,并且工作得很好。

由于角Web组件do的@输出允许不仅仅将字符串传递给,所以我在web组件中创建了可观察到的内容,立即订阅侦听事件,并立即将其传递给角主机应用程序。然后在主机应用程序中,通过标记接收可观察到的事件,并用于向侦听的web组件广播事件。

Web ( my是被设置为的ngDoBootstrap()内部导出组件的名称的选择器):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Output() setUpObservable = new EventEmitter<Subject<void>>();
eventsSubject: Subject<void> = new Subject<void>();
fetchEvent: Observable<any>;

ngOnInit(): void {
   eventsSubject: Subject<void> = new Subject<void>();
     fetchEvent: Observable<any>;

   this.fetchEvent = this.eventsSubject.asObservable();
       this.eventSubscription = this.fetchEvent.subscribe((x) => {
         // some code in here that I did not want to run until it was initiated by the host app
       });
       this.setUpObservable.emit(this.eventsSubject); // immediately send out the observable
}

主机应用程序标记:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<my-custom-element 
    (setUpObservable)="handleSetUpObservable($event)"
></my-custom-element>

主机应用程序组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eventsSubject: Subject<void> = new Subject<void>();

onButtonClick(): void {
 this.eventsSubject.next(someData); // this talks to the Web component to tell it to do stuff
}

handleSetUpObservable(event: CustomEvent): void {
    this.eventsSubject = event.detail.observers[0];
}
票数 1
EN

Stack Overflow用户

发布于 2020-09-07 16:55:57

您的组件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private eventsSubject: Subject<void> = new Subject<void>();
public subject = eventsSubject.asObservable();    

handleButtonClick(event: any): void {
 this.eventsSubject.next();
}

Html:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<my-custom-element [myData]="subject"></my-custom-element>

自定义元素实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component({
  selector: 'my-custom-element'
})
export class MyCustomElement {
  @Input()
  public myData: Observable<any>;

}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63785082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文