【发布时间】:2018-07-02 21:26:16
【问题描述】:
我有一个在页面上输出 cmets 的组件。在这些 cmets 中,有一些 HTML <footer>By John Doe on Jan 23, 2018</footer>。
我正在尝试将页脚的内容包装在 anchor link 中,以便您可以跳转到同一页面上的父通信。
组件 HTML:
<p [innerHTML]="linkComm(comm.Communication, comm)"></p>
comm.communication = Blah Blah Blah <footer>By John Doe on Jan 23, 2018</footer>
组件 TS:
/**
* Link to parent communication
* @param message
* @param comm
*/
linkComm(message, comm){
let output = message;
output = output.replace(/<footer>/gi, '<footer><a (click)="someMethod(comm.CommunicationID)">');
output = output.replace(/<\/footer>/gi, '</a></footer>');
return output;
}
当我采用这种方法时,不会像我预期的那样将click 事件添加到链接中。
我还尝试了此处建议的模块 (https://stackoverflow.com/a/46587554/2628921),该模块用于页面滚动,但似乎也没有在此处添加 pageScroll。
output = output.replace(/<footer>/gi, '<footer><a pageScroll href="#commID_'+comm.CommunicationID+'">');
这是一个安全问题,只能将某些属性添加到链接中吗?
【问题讨论】:
-
我可能是错的,但我不认为这是可能的......据我所知,简单来说,模板通过 Angular 以一种不可能“将 DOM 元素传递给它”通过一些字符串...这不是 jQuery :P 做它的角度风格!
-
@LaurentSchwitter - 我还能怎么做?我通过使用路由器链接尝试了角度方式,但它也与您提到的情况相同,将某些内容传递给元素。
output = output.replace(/<footer>/gi, '<footer><a [routerLink]="[\'routeexample1\']" fragment="info">'); -
为什么不直接创建一个评论组件,它会以更 Angular 的方式自行完成,而不是替换内部 HTML?
-
@SBB 天哪,请不要使用路由器来实现链接:P 执行 Amit 建议的操作...或者干脆 [(click)]="hasLink ? 'linkID' : ''" 或一些东西...我强烈建议您阅读一些有角度的文档...在我看来,您似乎没有,并且正在尝试使它像没有角度一样工作...按照一些快速入门指南或教程来维护您自己的福祉
标签: javascript angular typescript