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附加以在当前范围内传递。

<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/

10-11 23:27
查看更多