gpt4 book ai didi

javascript - AngularJS 中未提供时如何不渲染嵌入槽?

转载 作者:行者123 更新时间:2023-11-30 15:05:11 26 4
gpt4 key购买 nike

我有一个 AngularJS 组件,它使用带有 2 个嵌入槽的嵌入。其中之一 ( messageHeading) 是可选的,有时根本不会提供。代码如下:

消息.js

import template from "./messsage.html";

angular.component('message', {
transclude: {
heading: '?messageHeading',
content: 'messageContent'
},
template
});

消息.html

<aside class="message">
<h2 class="message__heading"
ng-transclude="heading"></h2>
<p class="message__paragraph"
ng-transclude="content"></p>
</aside>

问题

我怎么不渲染 <h2>根本没有元素,当messageHeading没有提供?在当前默认行为中它被呈现,只有空内容,但我希望它永远不会出现在 DOM 中。

使用 ngIf<h2>这似乎是一种自然的方式,但我不知道如何编写一个只有在提供了包含参数时才为真的条件。

最佳答案

我自己解决了。有 $transclude服务,提供方法 isSlotFilled(nameOfTheSlot)检查插槽是否已被填充。您可以将其用作 ngIf 的值条件等呈现 <h2>仅当插槽已被填充时。

消息.js

import template from "./messsage.html";


class MessageController {
constructor($transclude) {
this.hasHeading = $transclude.isSlotFilled('heading');
}
}


angular.component('message', {
transclude: {
heading: '?messageHeading',
content: 'messageContent'
},
controller: MessageController,
template
});

消息.html

<aside class="message">
<h2 class="message__heading"
ng-if="$ctrl.hasHeading"
ng-transclude="heading"></h2>
<p class="message__paragraph"
ng-transclude="content"></p>
</aside>

关于javascript - AngularJS 中未提供时如何不渲染嵌入槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45882637/

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