是否可以使用BrowserDomAdapter添加本地模板变量?

时间:2016-01-25 07:52:58

标签: typescript angular

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”之前的#前缀将子项标识为本地模板变量。我们可以在模板中引用此变量来访问子项的属性

1 个答案:

答案 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}},但最终结果将是相同的。