AngularJS +指令:多个被包含的元素

艾伦·索扎(Alan Souza)

我正在尝试添加一个body指令,该指令将具有一个左面板和一个右面板。但是在这些面板之间,我将有一些body指令专有的内容。我目前正在使用transclude = true选项加​​载内容。但是,我正在寻找一种使用两个ng-transclude的方法。我研究了很多解决方法,但是找不到理想的解决方案。我必须在body指令的编译步骤中手动添加已包含的对象。以下是我解决该问题的方法:

身体指令

var myApp = angular.module('myApp', []);

myApp.directive('body', function () {
    return {
        restrict: 'A',
        transclude: true,
        scope: {
            title: '@'
        },
        templateUrl: 'body.html',
        compile: function compile(element, attrs, transclude) {
            return function (scope) {
                transclude(scope.$parent, function (clone) {
                    for (var i = 0; i < clone.length; i++){ 
                       var el = $(clone[i]);
                       if(el.attr('panel-left') !== undefined) {
                            element.find('#firstPanel').html(el);
                       } else if(el.attr('panel-right') !== undefined) {
                            element.find('#secondPanel').html(el);
                       }
                    }
                });
            }
        }
    };
});

myApp.directive('panelLeft', function () {
    return {
        require: "^body",
        restrict: 'A',
        transclude: true,
        replace: true,
        template: '<div ng-transclude></div>'
    };
});

myApp.directive('panelRight', function () {
    return {
        require: "^body",
        restrict: 'A',
        transclude: true,
        replace: true,
        template: '<div ng-transclude></div>'
    };
});

模板

<script type="text/ng-template" id="body.html">
    <h1> {{title}} </h1>
    <hr/>

    <div id="firstPanel" class="inner-panel"></div>
    <div id="innerMiddleContent" class="inner-panel">middle private content here</div>
    <div id="secondPanel" class="inner-panel"></div>
</script>

<div body title="Sample Body Directive">
    <div panel-left>
        Public content that goes on the left
    </div>   

    <div panel-right>
        Public content that goes on the right
    </div>    
</div>

是此示例的JSFiddle。我正在寻找这样的东西:

必备模板

 <script type="text/ng-template" id="body.html">
     <h1> {{title}} </h1>
     <hr/>

     <div id="firstPanel" class="inner-panel" ng-transclude="panel-left"></div>
     <div id="innerMiddleContent" class="inner-panel">middle private content here</div>
     <div id="secondPanel" class="inner-panel" ng-transclude="panel-right"></div>
 </script>

问题:我做错什么了吗?是否有解决此问题的推荐方法?

光滑86

您看过此指令吗?

https://github.com/zachsnow/ng-multi-transclude

我认为这正是您想要的。

因此,只需对模板进行一些修改

<div ng-multi-transclude="panel-left" class="inner-panel"></div>
<div ng-multi-transclude="panel-right" class="inner-panel">middle private content here</div>
<div id="secondPanel" class="inner-panel"></div>

然后你可以像这样使用它

<div body title="Sample Body Directive">
  <div name="panel-left">
    Public content that goes on the left
  </div>   

  <div name="panel-right">
    Public content that goes on the right
  </div>    
</div>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS:在单个Angular指令中包含多个子元素

来自分类Dev

父元素中不包含AngularJS指令

来自分类Dev

AngularJS多个指令ngIf要求在!isFocused上包含

来自分类Dev

AngularJS:包含指令模板

来自分类Dev

AngularJS:包含指令模板

来自分类Dev

AngularJS指令模板包含

来自分类Dev

AngularJS指令包含

来自分类Dev

AngularJS多元素指令

来自分类Dev

元素与AngularJS指令中的this

来自分类Dev

AngularJS指令多个视图

来自分类Dev

AngularJS:指令上的ng-controller不适用于指令内的已包含元素

来自分类Dev

AngularJS指令-设置多个指令元素的顺序(不是指令的优先级,而是元素的优先级)

来自分类Dev

AngularJS指令包含文件内容

来自分类Dev

在AngularJS指令内单击包含在元素中的元素时调用函数

来自分类Dev

入门angularjs-在指令中包含指令

来自分类Dev

AngularJS指令获取内部元素

来自分类Dev

AngularJS指令中的元素高度

来自分类Dev

AngularJS指令为双元素?

来自分类Dev

AngularJS指令获取内部元素

来自分类Dev

使用多个服务的AngularJS指令

来自分类Dev

AngularJS多个指令要求ngModel

来自分类Dev

使用多个服务的AngularJS指令

来自分类Dev

AngularJS在同一元素上有多个指令,$ compile:multidir错误

来自分类Dev

angularJS指令中具有相同ng模型的多个输入元素

来自分类Dev

在AngularJS中使用指令的多个子HTML元素出现问题

来自分类Dev

当多个指令共享同一元素时,对AngularJS范围感到困惑

来自分类Dev

如何在 angularjs 中将多个值(字符串、数字、数组等)传递给元素指令

来自分类Dev

angularjs指令:如何检查被包含的内容

来自分类Dev

AngularJS:包含重复内容的ngRepeat指令

Related 相关文章

热门标签

归档