【发布时间】:2016-02-04 19:38:33
【问题描述】:
我试图弄清楚在元素添加到 DOM 后如何向元素添加事件。
现在,我有这样的事情:
import {Component} from 'angular2/core';
@Component({
selector : 'sub-child',
template : '<form [innerHTML]="html"></form>'
})
export class SubChildClass
{
private html:string;
private buttonText:string;
constructor()
{
this.buttonText = 'A new button';
this.create();
}
private create()
{
this.html = "<button (click)='new()'>" + this.buttonText + "</button>"
}
private new()
{
this.buttonText = "Text Changed";
}
}
不起作用的部分是:
this.html = "<button (click)='new()'>" + this.buttonText + "</button>"
此时,Angular 2 不知道如何处理 (click)='new()'。我不确定这样做的正确方法是什么。
我希望以后能够通过一些相应的事件将 HTML 添加到 DOM。
我没有使用过 Angular 1。但听起来这曾经相当于 $compile in Angular 1。其他一些帖子建议使用Dynamic Content Loader 处理此类内容。但这似乎不是这个用例的正确答案。因此,感谢任何帮助或指导。谢谢,
【问题讨论】:
-
为什么不直接在模板中添加按钮? angular 2 的想法是你尽量避免自己创建 dom 对象,让 angular 为你做这件事。你将你想要的组件直接添加到模板中,如果你想以动态方式显示或出现,你可以使用
*ngIf="flag"之类的东西来告诉他什么时候渲染,什么时候不渲染。 -
就像我提到的,Angular 中的想法是在模板中定义这些动态元素,并通过使用诸如
ngIf、ngFor、ngClass之类的结构属性,您可以更改它们的外观或行为。因此,您的逻辑会更改模型,并且视图会对这些更改做出反应。如果您展示您的真实案例,可能会更容易告诉您执行此操作的“角度方式”是什么。如果您真的想自己创建它们,请查看:angular.io/docs/ts/latest/api/core/ElementRef-class.html 并确保您阅读了警告,以免错过。 -
“我希望以后能够通过一些相应的事件将 HTML 添加到 DOM” 是的,但是您的示例中的代码不是 HTML,它的 Angular 模板语法angular.io/docs/ts/latest/guide/template-syntax.html .
-
Angular 并不是为了这样使用而设计的,所以即使有可能它也不会像正确的方式那样简单。您可能必须自己控制事件:angular.io/docs/ts/latest/api/core/EventEmitter-class.html 在没有真实案例的情况下无法说出真正的答案,在您发布的示例中,解决方案是将代码添加到模板中。
-
我必须强烈同意@Langley 的观点。这真的不是解决这个问题的好方法,sigh...我已经发布了一个可能的例子但是正如你所看到的,当你降到这个级别时,你会失去很多。实际上,您最好只在 angular2 组件内用 jQuery 编写站点或表单并以 jQuery 方式控制它。请花一些时间考虑考虑这个问题的替代方案或其他方式,您可能会使用嵌套组件或其他方式找到更好的解决方案。
标签: angular typescript