gpt4 book ai didi

javascript - Angular 多重嵌入元素的动态数量

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:31 24 4
gpt4 key购买 nike

Angular 1.5 支持 multi transclude .

值得注意的是,能够将动态数量的项目嵌入指令并在稍后声明这些嵌入的名称和位置(例如在链接/编译中)会很有用。

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

//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>'
};
})

请注意,在实现多嵌入的指令声明中,我必须事先了解声明时将被嵌入的项数。

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

最佳答案

不幸的是,Angular 似乎没有提供任何非侵入式的方式来做到这一点。

然而,它可以通过一些小调整来实现。

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

...

var slots = createMap();

$template = jqLite(jqLiteClone(compileNode)).contents();

// Small tweak to allow dynamic transclusion
if (directiveValue === 'dynamic') {
directiveValue = $parse(templateAttrs.transcludeDynamic)();
}

if (isObject(directiveValue)) {

// We have transclusion slots,
// collect them up, compile them and store their transclusion functions
$template = [];

...

这允许我们在组件的消费者中指定嵌入选项,如下所示:

<my-custom-component transclude-dynamic="{testSlot: 'test', testSlot2: 'test2'}">
<test>something to transclude</test>
<test2>then another slot content to transclude</test2>
</my-custom-component>

在组件中我们启用动态嵌入:

...
selector: 'myCustomComponent',
template: template,
transclude: 'dynamic',
bindings: {
transcludeDynamic: '<'
}

请注意,我们还绑定(bind)了嵌入信息,这使我们能够对其执行 ng-repeat、ng-if 和任何其他逻辑。

例如:

<div ng-repeat="(slot, name) in $ctrl.transcludeDynamic">
<div ng-transclude="{{slot}}"></div>
<hr>
<div>something else</div>
</div>

公关:https://github.com/angular/angular.js/pull/14227

关于javascript - Angular 多重嵌入元素的动态数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com