Vue はコンポーネントをどのようにカプセル化しますか? Vue のカプセル化されたコンポーネントの具体的な実装は何ですか?ここでは、Vue でタブ切り替えコンポーネントをカプセル化する方法を共有します。具体的なコードの実装を見てみましょう。
簡易バージョン
tab に対応するタブは通常のテキストであり、主に表示コンポーネントに使用されます。
複合バージョン
タブに対応するタブには、テーブル、ボタン、アイコン、フォーム、およびデータ対話、親コンポーネントとの通信などを含むその他の要素が含まれます。
パフォーマンスの最適化
タブを切り替えるときにコンポーネントをキャッシュします。
小道具
親コンポーネントはパラメータを子コンポーネントに渡します。
tabList (タブのタイトルリスト)、tabIndex (現在のタブ番号)
カスタムイベント
タブ切り替えイベント
スロット
コンテンツ配信
動的コンポーネント
keep-alive: 切り替えたコンポーネントをメモリに保持すると、その状態を保持したり、再レンダリングを回避したりできます
それが最初の要件である場合、コンポーネントを自分で記述する必要はありません。 UIフレームワークの既存コンポーネントのニーズに十分対応できる機能を備えています。
それが 2 番目の要件である場合、一般に完全に適切な UI コンポーネントは存在せず、この例は私の個人的な解決策です。
タブのパブリック部分をカプセル化
タブに対応するコンテンツ領域はスロットコンテンツ配信を使用します
ajaxリクエストデータとその他の操作は配信コンテンツコンポーネントで実行されます。
フック機能が有効になりました
コンポーネントがアクティブ化されているかどうかを監視します。
template
<p class="my-tabs"> <p class="tabs-bar"> <p class="tabs-bar-nav"> <p class="tabs-tab" v-for="tab in tabList" :class="[tabIndex == tab.index ? 'tabs-active' : '']" @click="changeTab(tab)"> {{tab.name}} </p> </p> </p> <p class="tabs-content"> <slot></slot> </p> </p>
export default { name: 'MyTabs', props: { tabList: Array, tabIndex: Number }, data () { return { } }, methods: { changeTab: function (tab) { this.$emit('changeTab', tab) } } }
style
<style scoped lang="scss"> .my-tabs { font-size: 14px; color: #444; } .tabs-bar { border-bottom: 1px solid #eee; position: relative; padding: 5px 0; } .tabs-bar-nav { display: table; margin-left: 35px; position: absolute; bottom: -1px; } .tabs-tab { min-width: 110px; padding: 5px 0; position: relative; display: inline-block; text-align: center; cursor: pointer; } .tabs-active { border-top: 1px solid pink; border-left: 1px solid pink; border-right: 1px solid pink; border-bottom: 1px solid #fff; } .tabs-content { padding-left: 20px; padding-right: 20px; padding-bottom: 30px; } </style>
次の 1 つと 2 つは、中の p です。
<!-- Tabs --> <my-tabs :tabList="tabList" :tabIndex="tabIndex" @changeTab="changeTab"> <keep-alive> <component :is="currentContent"> </component> </keep-alive> </my-tabs>
import MyTabs from '../componets/tabs.vue' import One from './one.vue' import Two from './two.vue' export default { name: 'Home', components: { MyTabs, 'one': One, 'two': Two }, data () { return { tabIndex: 0, currentContent: 'one', tabList: [ { index: 0, name: '选项一', component: 'one' }, { index: 1, name: '选项二', component: 'two' } ] } }, methods: { // 切换选项卡 changeTab: function (tab) { this.tabIndex = tab.index this.currentContent = tab.component } } }
tabs.png
関連推奨事項:
Jquery は、タブ自動切り替えの特定の実装をカプセル化しますエフェクト_jquery
タブ切り替えコンポーネント (タブ関数) サンプル コード_jquery
以上がvueでコンポーネントをカプセル化するにはどうすればよいですか? vue のタブ切り替えコンポーネントをカプセル化する方法 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。