angularjs – 如何在编译内部指令之前修改被转换的内容?

前端之家收集整理的这篇文章主要介绍了angularjs – 如何在编译内部指令之前修改被转换的内容?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要做的是,在插入DOM之前手动处理transclude并修改内容
return {
    restrict: 'E',transclude: true,template: '<HTML>',replace: true,link: function(scope,element,attrs,ngModelCtrl,$transclude) {

        var caption = element.find('.caption');

        $transclude(function(clone) {
            console.log(clone);
            clone.filter('li').addClass('ng-hide'); // this don't work
            clone.addClass('ng-hide'); // same this one
            clone.attr('ng-hide','true'); // same this one
            $compile(clone)(scope.$new()).appendTo(caption);
            caption.find('li').addClass('ng-hide'); // and this
        });
    }
}

在angular.js源代码中我找到了这个例子:

var templateElement = angular.element('<p>{{total}}</p>'),scope = ....;

  var clonedElement = $compile(templateElement)(scope,function(clonedElement,scope) {
    //attach the clone to DOM document at the right place
  });

  //now we have reference to the cloned DOM via `clonedElement`

但是当我添加clonedElement.appendTo(标题);在内部链接功能中,它只在ng-repeat内添加注释.

我需要这个,因为在这种情况下我需要隐藏所有元素

<dropdown>
  <li ng-repeat="item in items"><a>{{item.label}}</a></li>
</dropdown>

我需要在扩展ng-repeat之后在编译或DOM之前修改模板.之前会更好,因为我可以使用ng-hide指令而不是ng-hide类添加逻辑.

jcubic.您不必使用$compile来完成您要执行的操作.

您可以过滤已转换的元素“clone”并将css类添加到已过滤的节点,但之后您必须将修改后的克隆附加到模板(它由链接函数的“element”属性标识).

element.append(clone)

我为你创建了这个jsfiddle.

如果你还有其他问题,请为你的案例创建一个jsfiddle.它会更好地回答Thx

猜你在找的Angularjs相关文章