Javascript 检测在angular中传递给$compile的字符串是否可编译的最佳方法?

Javascript 检测在angular中传递给$compile的字符串是否可编译的最佳方法?,javascript,angularjs,Javascript,Angularjs,我正在构建一个接受“消息”的指令,该“消息”也可以包含html和嵌套的角度指令。现在在我的指令中,我做: var compiled = $compile(message)($scope); this.message = $sce.trustAsHtml(compiled.html()); 但是如果消息没有有效的开始和结束标记,它将不会编译。我想知道是否有其他方法,或者angular是否有任何方法可以在不使用正则表达式的情况下做到这一点。我肯定不会解析或验证HTML。jQuery/jqLite已

我正在构建一个接受“消息”的指令,该“消息”也可以包含html和嵌套的角度指令。现在在我的指令中,我做:

var compiled = $compile(message)($scope);
this.message = $sce.trustAsHtml(compiled.html());

但是如果消息没有有效的开始和结束标记,它将不会编译。我想知道是否有其他方法,或者angular是否有任何方法可以在不使用正则表达式的情况下做到这一点。

我肯定不会解析或验证HTML。jQuery/jqLite已经为我们做到了这一点

angular.element
需要根元素。因此,将消息包装在根元素中,编译并链接,然后取出内容:

link: function(scope, element){
    scope.param = "test";
    var message = "foo {{param}} bar";

    var el = angular.element("<div>").append(message);
    var compiled = $compile(el)(scope);

    element.append(compiled.contents());
}
链接:功能(范围、元素){
scope.param=“测试”;
var message=“foo{{param}}}bar”;
var el=angular.element(“”).append(消息);
已编译变量=$compile(el)(范围);
元素.append(compiled.contents());
}

它是否引发异常?为什么不使用
try{}catch
?不,它不会抛出异常,只是将其清空。我现在正在做这个:/*首先我测试消息是否有一个有效的html开始和结束标记,如果没有,我为他们做/var hasStartAndEndTag=/^)$/.test(消息);如果(!hasStartAndEndTag){message=''+message+'';}var compiled=$compile(message)($scope);this.message=$sce.trustAsHtml(compiled.html());被认为不“可编译”的内容。你能举一个不可编译的
消息的例子吗?如果我的消息只是“foo-bar-bing”,它就不起作用了。如果它是“Foo-bar-bing”,它就像要求一个模板有一个有效的开始和结束标记一样。为什么不能添加一个根元素并用它编译呢?然后,把里面的东西拿出来。我用这个结束,因为它更快。/*首先,我测试消息是否有一个有效的html开始和结束标记,如果没有,我为它们做这件事*/var hasStartAndEndTag=message.charAt(0)='';如果(!hasStartAndEndTag){message=''+message+'';}