Hie ...有没有办法可以将localtemplate变量设置为创建的元素。因为我希望创建的元素应该有一个localtemplate变量。我可以设置id,因为它是一个属性,但不是localtemplate变量。我做了一个plunker demo http://plnkr.co/edit/VGHEPBs8oZW7HG6Ze21z?p=preview我试图用以下方式创建它
add(){
var a=this.dom.createElement('button');
var b=this.dom.createTemplate('<div #child></div>');
this.dom.on(a, 'click', this.raiseevent.bind(this, this.op));
this.dom.setInnerHTML(a,'clickme');
this.dom.appendChild(this.dom.query("my-app"),a);
this.dom.appendChild(this.dom.query("my-app"),b);
this.op++;
}
意味着它类似于我可以在视图中的任何地方使用它的id ...它将是这样的,其中#child是本地模板变量。 “child”之前的#前缀将子项标识为本地模板变量。我们可以在模板中引用此变量来访问子项的属性
答案 0 :(得分:0)
为什么需要注入DOM元素,使用组件可以完成同样的工作?
@Component({
selector: 'child',
template: `<button (click)="raiseevent()">clickme</button>`
})
export class ChildComponent{
raiseevent(){
// do something
}
}
@Component({
selector: 'my-app',
template: `<child #child *ngFor="#item in children"></child>`,
directives: [ChildComponent]
})
export AppComponent{
children: any[] = [];
add(){
this.children.push({...});
}
}
最终结果将是相同的。每次调用add()
方法时,都会添加一个新按钮,其中包含自己的raiseevent()
方法。您甚至可以让孩子使用EventEmitter
在父级上触发方法。
这不会考虑您注入的<div #child></div>
,因为我不知道您的意图是什么。如果您能提供更详细的示例,我可以提供更全面的答案。虽然您可以轻松地将<div>
添加到template
的{{1}},但最终结果将是相同的。