gpt4 book ai didi

Angular2(点击)动态加载组件 View

转载 作者:太空狗 更新时间:2023-10-29 17:48:24 25 4
gpt4 key购买 nike

我创建了一个点击动态加载组件 View ,但我将每次点击分开。我想要一个函数,我通过函数传递一个字符串,而不是在我的函数中输入该字符串来加载 View 。

这是一个工作的plunker http://plnkr.co/edit/ZXsIWykqKZi5r75VMtw2?p=preview

组件

@Component({
selector: 'my-app',
template: `
<div>
<h2>Lets dynamically create some components!</h2>
<button (click)="createHelloWorldComponent()">Create Hello World</button>
<button (click)="createWorldHelloComponent()">Create World Hello</button>
<dynamic-component [componentData]="componentData"></dynamic-component>
</div>
`,
})

export class App {
componentData = null;

createHelloWorldComponent(){

this.componentData = {
component: HelloWorldComponent,
inputs: {
showNum: 9
}
};
}

createWorldHelloComponent(){
this.componentData = {
component: WorldHelloComponent,
inputs: {
showNum: 2
}
};
}
}

想要的是一个函数,并从数组中定义一个在(单击)中传递并加载 View 的变量。这是一个尝试的 plunker: http://plnkr.co/edit/HRKGhCCEfkOhNjXbr6C5?p=preview

@Component({
selector: 'my-app',
template: `
<div>
<h2>Lets dynamically create some components!</h2>

<li *ngFor="let item of myMenu">

<button (click)="loadView({{ item.viewname }})">{{ item.id }}</button>
</li>

<dynamic-component [componentData]="componentData"></dynamic-component>
</div>
`,
})
export class App {
componentData = null;
myMenu = {};
constructor() {
this.myMenu = myMenu;

}

loadView(viewName){

this.componentData = {
component: viewName,
inputs: {
showNum: 9
}
};
}


}

const myMenu = [
{
id: 1,
viewname: 'HelloWorldComponent'
},
{
id: 2,
viewname: 'WorldHelloComponent'

},


];

最佳答案

使用下面的代码,

@Component({
selector: 'my-app',
template: `
<div>
<h2>Lets dynamically create some components!</h2>
<button (click)="createComponent($event)">Create Hello World</button>
<button (click)="createComponent($event)">Create World Hello</button>
<dynamic-component [componentData]="componentData"></dynamic-component>
</div>
`,
})

并且组件方法会有如下代码

createComponent(val){
if(val.srcElement.innerHTML==='Create Hello World')
{
this.createHelloWorldComponent()
}
if(val.srcElement.innerHTML==='Create World Hello'){
this.createWorldHelloComponent()
}
}

LIVE DEMO 更新了你的 plunker。

更新 1:当您还没有准备好在 if 条件下处理它们时,您应该有一个映射属性以根据单击的项目返回 componentData。

var myComponents =[{
id : 1,
component: HelloWorldComponent,
inputs: { showNum: 9 }
},{
id : 2,
component: WorldHelloComponent,
inputs: { showNum: 0 }
}];
var myMenu = [{
id: 1,
viewname: 'HelloWorldComponent',
componentID : 1
},
{
id: 2,
viewname: 'WorldHelloComponent',
componentID : 2
}];

LIVE DEMO

关于Angular2(点击)动态加载组件 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42880537/

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