Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度倍数排除动态元素数_Javascript_Angularjs_Angularjs Directive_Angularjs Ng Transclude - Fatal编程技术网

Javascript 角度倍数排除动态元素数

Javascript 角度倍数排除动态元素数,javascript,angularjs,angularjs-directive,angularjs-ng-transclude,Javascript,Angularjs,Angularjs Directive,Angularjs Ng Transclude,角度1.5可实现以下功能: 值得注意的是,能够将动态数量的项转移到指令中,并在以后声明这些转移的名称和位置(例如,在链接/编译中)将非常有用 为了进一步说明,我希望能够执行以下操作: //Example usage of directive <multi-slot-transclude-example> <transclude1>TEST1</div> <transclude2>TEST2</div> <transclude3&g

角度1.5可实现以下功能:

值得注意的是,能够将动态数量的项转移到指令中,并在以后声明这些转移的名称和位置(例如,在链接/编译中)将非常有用

为了进一步说明,我希望能够执行以下操作:

//Example usage of directive
<multi-slot-transclude-example>
<transclude1>TEST1</div>
<transclude2>TEST2</div>
<transclude3>TEST3</div>
<transclude4>TEST4</div>
.... dynamic number of items ...
</multi-slot-transclude-example>

//Example of directive that dynamically transcludes multiple items
angular.module("multiSlotTranscludeExample", [])
    .directive("directiveName", function(){
    return {
        restrict: 'E',
        transclude: {
            't1': '?transclude1',
            't2': '?transclude2',
            //I'd like this list to be able to be defined non-statically (e.g. in link)
        },
        template: '<div ng-repeat="n in transcludedElementList">'
        + '<div ng-transclude="t{{n}"></div>'
        + '</div>'
        };
})
//指令的示例用法
测试1
测试2
测试3
测试4
.... 动态项目数。。。
//动态转包多个项的指令示例
angular.module(“multiSlotTranscludeExample”,[])
.directive(“directiveName”,function()){
返回{
限制:'E',
排除:{
“t1”:“transclude1”,
‘t2’:‘transclude2’,
//我希望此列表能够非静态地定义(例如,在链接中)
},
模板:“”
+ ''
+ ''
};
})
注意,在实现多重转置的指令声明中,我必须事先知道声明时将转置的项的数量


有没有一种方法可以在链接(或使用变通方法)中执行类似的操作,从而保持transclusion current提供的相同功能?

不幸的是,Angular似乎没有提供任何非侵入性的方法来执行此操作

不过,只需稍加调整即可实现

我们需要介入angular.js的转换槽逻辑:

。。。
var slots=createMap();
$template=jqLite(jqLiteClone(compileNode)).contents();
//允许动态转换的小调整
if(directiveValue==='dynamic'){
directiveValue=$parse(templateAttrs.transcludeDynamic)();
}
if(isObject(directiveValue)){
//我们有转换槽,
//收集它们,编译它们并存储它们的转换函数
$template=[];
...
这允许我们在组件的使用者中指定转换选项,如下所示:


要排除的东西
然后是另一个要转移的插槽内容
在组件中,我们启用动态转换:

。。。
选择器:“myCustomComponent”,
模板:模板,
排除:“动态”,
绑定:{
排除动力学:'