私は今、material-components-webをラップするAureliaコンポーネントを作成しています。複数のコンテンツセクション(アクションなど)を実装する正しい方法が何であるか疑問に思っています。コンポーネント内の条件付きラッピングスロットAurelia
スロットは正しい選択肢だと思われますが、実際にアクションが存在する場合にのみ、常にテンプレートにアクションdivを置くことはできません。
簡単に言えば、スロットがコンポーネントテンプレート内で定義されているかどうかを確認する必要があります。
<template>
<div class="card">
<div class="content">
<slot></slot>
</div>
<!-- somehow check here if the slot has been defined -->
<div class="actions">
<slot name="actions"></slot>
</div>
</div>
</template>
完璧に、本当に機能します。私はこのトピックで何も見つけることができなかったことに驚いています。誰もがカスタム属性を使用してクラスと一緒にdivを装飾しているように見えます。 – marekpw
質問に続き、多分無関係です:[this](https://gist.run/?id=3e6875bac99fb2fb984039b88a873049)が動作しない理由を知っていますか?私はいくつかのロジックをビューモデルに抽象化しようとしました。なぜなら、私は多くの場所で定義されたスロットをチェックするためです。添付された()が起こる前に、slotDefined()メソッドが一度だけ呼び出されたようです。また、@computedFrom( '$ slots')デコレータを使用してみましたが、コンポーネントがレンダリングされず(エラーなし)、定義されたスロットだけがレンダリングされます。 – marekpw
[こちらのハック](https://gist.run/?id=abf47aa5d72feaeedcd7bced74f2f6f4)でどうぞ。 .bindは関数を呼び出すことができないので、ゲッターを使用して回避する必要がありました。すべてが完璧に機能します。もう一度あなたの助けに感謝します。 – marekpw