显示包含指令的文本

时间:2017-09-08 10:04:31

标签: angularjs angularjs-directive

在我的网站上,我想标准化与其他人的链接方式,所以我做了一个指示:

<my-person id="1"></my-person>

app.directive('myPerson', function() {
  return {
    restrict: 'E',
    replace: 'true',
    template: '<a href="#/person/{{person.id}}">{{person.name}}</a>',
    scope: {
      person_id : '=id',
    },
    controller: function($scope, Repository) {
      Repository.getPerson($scope.person_id).then(function(p) {
          $scope.person = p;
      });
    },
  };
});

这很有效。

但是在下一步中,我希望用户写新闻,而在这些新闻中,他们想要引用其他人。基本上,我想显示一个文本

'I met <my-person id="42"></my-person> yesterday.'

但是当angularjs显示我的新闻条目的这个上下文时,那么html标签当然会被转义,也不会被编译。

有没有简单的方法来实现这一目标?这是一个显示我的问题的jsfiddle:jsfiddle link

1 个答案:

答案 0 :(得分:2)

您需要在ng-repeat块中编译html。

为此制定如下指令

app.directive('bindHtmlCompile', ['$compile', function ($compile) {
        return {
            restrict: 'A',
            link: function (scope, element, attrs) {
                scope.$watch(function () {
                    return scope.$eval(attrs.bindHtmlCompile);
                }, function (value) {
                    element.html(value);
                    $compile(element.contents())(scope);
                });
            }
        };
    }]);

现在在你的ng-repeat中添加你的指令到这样的范围:

<span class="row"  bind-html-compile="newsEntry.text"></span>

工作代码here

参考here