Angular$compile为带引号的非HTML字符串抛出错误
Angular $compile throws error for non-HTML string with quotes
我正试图使用$compile
将用户提供的HTML注入指令中。
module.directive('foo', ["$compile", function($compile) {
return {
// ...
link: function($scope, el) {
// ...
var userHtml = userConfigObject.content;
var compiledHtml = $compile(userHtml)($scope);
myElement.innerContent.html(compiledHtml);
}
};
}]);
我想允许用户注入一个字符串(例如"Let's party!"
)或一些HTML(例如'<div ng-click="foo()">Click to party!</div>'
)。
但是,当用户只提供带引号的字符串(或任何其他"无效HTML")时,$compile
语句会给出以下错误:
语法错误,无法识别的表达式:Let's party!
(这个错误最终来自jQuery的Sizzle逻辑)。
我能想到的解决这个问题的唯一方法(同时仍然允许非HTML和HTML字符串)是使用它。
var stepHtml = '<div>' + userConfigObject.content + '</div>';
使得CCD_ 5总是接收到有效的HTML字符串。但是,我不希望不必要地将内容包装在div
中。
不起作用的解决方案
我事先尝试过转义用户内容(用HTML代码替换引号),但没有成功。
我还试着使用$sanitize
,以为它可以转义字符或其他什么,但也没用。
最后,当我使用$interpolate
时,ng-click
属性不起作用。
关于如何在非HTML字符串上使用$compile
,有什么想法吗?还是我看错了方向?
如果用户实际上正在输入ng-click
之类的指令,那么您可以看到html中是否包含元素:
var userHtml = userConfigObject.content;
var $tempDiv = angular.element('<div>').html(userHtml);
if(!$tempDiv.children().length){
userHtml = $tempDiv
}
var compiledHtml = $compile(userHtml)($scope);
myElement.innerContent.html(compiledHtml);
如果根目录中有与元素混合的文本节点,那么最好的选择是始终包装在容器中
相关文章:
- 将html元素插入到文本字符串中,以匹配另一个html字符串
- HTML字符串作为上下文
- 正在分析HTML字符串并从中进行选择
- 将GET请求(HTML字符串)转换为完整的DOM对象
- 在树枝模板上从数据库中解压缩HTML字符串
- 如何使用Razor显示模板将字符串转换为html字符串
- 如何在不打断标记的情况下突出显示html字符串中的文本
- 使用val()在jquery循环中设置html字符串的val
- 搜索并用jQuery替换整个HTML字符串
- 替换 html 字符串中的某些“<”和“>”
- Javascript-将包含变量的html字符串作为参数传递
- 如何用JavaScript替换HTML字符串
- 如何在我的模板(Angular2/TypeScript)中将HTML字符串转换为HTML
- 在HTML字符串的某个段落后插入HTML
- 使用 javascript 压缩包含嵌入图像的 HTML 字符串
- 需要使用Java编码/转义HTML字符串,并在JavaScript中解码HTML字符串
- 在不更改 HTML 的情况下操作 HTML 字符串的内容
- 使用JavaScript从HTML字符串中提取文本
- regex在JavaScript中拆分一个html字符串
- 创建HTML对象的Javascript与创建HTML字符串的比较