代码之家  ›  专栏  ›  技术社区  ›  JasonStoltz

具有“元素”转换的角度模板

  •  0
  • JasonStoltz  · 技术社区  · 12 年前

    给定指令“wrap input”:

    scope: {},
    transclude: 'element',
    template: '<div>' +
              '<ng-transclude></ng-transclude>' +
              '</div>'
    

    使用方式如下:

    <input wrap-input></input>
    

    我希望结果是,它按照模板将整个输入元素跨导并包装在一个div中。但它并没有,它只是在那里留下了一条评论,没有被修正。如何获得指令以将模板应用于已排除元素的位置?

    预期:

    <div>
      <input wrap-input></input>  
    </div>
    

    真实的

    <!-- wrapInput:  -->
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   runTarm    12 年前

    为了使用 transclude: 'element' 随着 template 或 templateUrl ,您还必须设置 replace: true 看见 #3368 对于解释。

    如果您想在某些兄弟之间放置transclude元素,则必须在link中使用transclude函数,而不是 ng-transclude 这样地:

    .directive('wrapInput', function() {
      return {
        scope: {},
        transclude: 'element',
        replace: true,
        template: '<div>' +
            '<div>Sibling A</div>' + 
            '<div class="transclution-point"></div>' +
            '<div>Sibling B</div>' +
          '</div>',
        link: function (scope, element, attrs, controllers, transcludeFn) {
          transcludeFn(function (clone) {
            element.find('.transclution-point').replaceWith(clone);
          });
        }
      };
    });
    

    示例punker: http://plnkr.co/edit/tkMCZB6vxNOwSiLwYbkp?p=preview

        2
  •  1
  •   TheSharpieOne    12 年前

    您可以使用 wrap 角度开启元件提供的功能

    link: function(scope, element, attributes){
        element.wrap('<div />');
    }
    

    小提琴: http://jsfiddle.net/fa54a/