gpt4 book ai didi

javascript - Angular2 - 将参数传递给动态生成的组件?

转载 作者:太空狗 更新时间:2023-10-29 17:46:27 26 4
gpt4 key购买 nike

我有一个简单的演示应用程序,我根据输入的数字模拟从数据库手动插入/获取数据并注入(inject)新组件。

Plunker

enter image description here

所以如果我点击“手动”按钮两次:

enter image description here

如果我在文本中设置“3”并单击“从数据库中获取”- 我得到预期的延迟(模拟数据库)然后:

enter image description here

这一切都按预期工作。

“父”组件是:

//src/MainPage.ts
@Component({
selector: 'my-app',
template: `
<button (click)="putInMyHtml()">Insert component manually</button>
<p> # Items to fetch : <input type="text" style='width:40px' [(ngModel)]="dbNumItems" name="dbNumItems"/> <input type='button' value='fetch from db' (click)='fetchItems($event)'/></p>
<div #myDiv>
<template #target></template>
</div>
`
})
export class MainPage {
@ViewChild('target', { read: ViewContainerRef }) target: ViewContainerRef;
dbNumItems: string;
constructor(private cfr: ComponentFactoryResolver) {}

fetchItems(){
var p= new Promise((resolve, reject) => { //simulate db
setTimeout(()=>resolve(this.dbNumItems),2000)
});

p.then(v=>{

for (let i =0;i<v;i++)
{
this.putInMyHtml() ;// inject "v" times
}
})

}

putInMyHtml() {
// this.target.clear();
let compFactory = this.cfr.resolveComponentFactory(TestPage);
this.target.createComponent(compFactory);
}
}

这是注入(inject)组件:

//src/TestPage.ts
@Component({
selector: 'test-component',
template: '<b>Content : Name={{user.Name}} Age={{user.Age}}</b><br/>',
})
export class TestPage {
@Input
User:Person;

}

那么问题出在哪里呢?

如您所见,在注入(inject)的组件中我有:

@Input
User:Person;

这意味着我希望 parent 组件将一个 Person 对象传递给每个注入(inject)。

换句话说:

问题

看看“after db stage”,如何将自定义的 person 传递给每个注入(inject)?

  p.then(v=>{

for (let i =0;i<v;i++)
{
let p = new Person();
p.Name = "name"+i;
p.Age = i;

this.putInMyHtml() ; //how to I pass `p` ???

}
})

}

预期输出:

enter image description here

注意我不想使用 ngFor 因为我不需要在后端保存数组。这是一个定期注入(inject)新文章的应用程序。如果有更好的方法,我将很高兴知道。

最佳答案

您可以像这样使用组件 ref 的 instance 属性来做到这一点:

putInMyHtml(p) {
// this.target.clear();

let compFactory = this.cfr.resolveComponentFactory(TestPage);

let ref = this.target.createComponent(compFactory);
ref.instance.user = p;
}

-修复了 @Input() 绑定(bind),语法错误。

- 为模板添加了一个安全导航运算符 (?) 以对异步输入执行空值检查。

修复了 plunker:https://plnkr.co/edit/WgWFZQLxt9RFoZLR46HH?p=preview

关于javascript - Angular2 - 将参数传递给动态生成的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43160685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com