This question already has an answer here:
how to compile results of filter before rendered in angularjs
(1个答案)
5年前关闭。
您好,我是Angular JS的新手,并且刚接触它,Im试图创建一个过滤器,该过滤器将编译存储在数据库中的给定字符串。下面是HTML,它将history.activity传递给我的动态过滤器,并带有:this附加以在当前范围内传递。
history.activity变量包含一个Angular模板格式的字符串,如下所示,这些字符串将根据所记录的活动从数据库中拉入时有所不同。
我下面的过滤器是非常基础的,应该编译源代码,但是它只是返回未定义的.....
有任何想法吗?我在哪里错呢?任何帮助是极大的赞赏 :)
(1个答案)
5年前关闭。
您好,我是Angular JS的新手,并且刚接触它,Im试图创建一个过滤器,该过滤器将编译存储在数据库中的给定字符串。下面是HTML,它将history.activity传递给我的动态过滤器,并带有:this附加以在当前范围内传递。
<ul>
<li ng-repeat="history in recentActivity">
{{ history.activity | dynamic:this }}</p>
</li>
</ul>
history.activity变量包含一个Angular模板格式的字符串,如下所示,这些字符串将根据所记录的活动从数据库中拉入时有所不同。
{{ history.username }} logged in at {{ history.created_date | date }}
我下面的过滤器是非常基础的,应该编译源代码,但是它只是返回未定义的.....
app.filter('dynamic', function ($compile) {
return function (source, scope) {
return $compile(source)(scope);
};
});
有任何想法吗?我在哪里错呢?任何帮助是极大的赞赏 :)
最佳答案
如果您的activity
变量不包含HTML而是仅包含角度表达式,则需要使用$interpolate
而不是$compile
-check the angular.js docs for it。
如果需要动态放置一些HTML,则需要使用Jonathan所说的指令-过滤器不能用于包含HTML。
但是实际上我还是建议使用指令-编译/插值都相对较慢,因此最好仅在您的表达式发生更改时才调用它们(可以通过$watch
指令内部的调用来实现)。筛选器表达式在每个摘要循环中被调用两次,如果您经常使用此筛选器,则可能会遇到性能问题。
关于javascript - 创建一个过滤器以在Angular JS中编译动态字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21390583/