ホームページ >ウェブフロントエンド >jsチュートリアル >Vueの組み込みコンポーネントの適用手順の詳細な説明
今回は、Vue の組み込みコンポーネントの適用手順について詳しく説明します。 Vue の組み込みコンポーネント コンポーネントを適用するときの 注意事項 について、実際のケースを見てみましょう。
公式手順
「メタコンポーネント」を動的コンポーネントとしてレンダリングします。どのコンポーネントがレンダリングされるかは、 is の値によって異なります。
<!-- 动态组件由 vm 实例的属性值 `componentId` 控制 --> <component :is="componentId"></component>
詳細については、公式 Web サイトのドキュメントの
ダイナミック コンポーネント
組み込みコンポーネント コンポーネント
シナリオ
を参照してください。ここでは、Vue の構築されたアプリケーションを説明するためにビジネス シナリオが使用されています。 -in コンポーネント コンポーネント。 写真に示すように、ここでは古典的な 登録ページ があり、登録はメール登録と携帯電話登録に分かれています。 ポップアップ ウィンドウの上部に登録タイプを切り替えるためのラベルがあります。登録フォーム情報 メール登録と携帯電話登録では、下部の登録ボタンやその他の操作が異なります。 分析の結果、携帯電話登録インターフェイスと電子メール登録インターフェイスは、中間のフォームの内容が一貫していないことを除いて同じです。
実際のプロジェクトのコード設計では、再利用性と保守性を確保するための実現可能な解決策がいくつかあります。ここでは、vue の組み込みコンポーネント コンポーネントを使用してこれを実現します。
コアコード実装
トップタブを切り替えるとtype値が変わり、対応するフォームコンポーネントも変わります
<template> <p> <a href="javascript:;" rel="external nofollow" rel="external nofollow" @click.prevent="handleCloseBtnClick"></a> <p> <h3>新用户注册</h3> <p> <span :class="{active: type === 'mobileForm'}" @click="type = mobileForm">手机注册</span> <span :class="{active: type === 'emailForm'}" @click="type = emailForm">邮箱注册</span> </p> </p> <component :is="type" ref="form"> <button @click="handleRegisterBtnClick">注册</button> <p ><span ><span>注册视为同意</span><a> 《法律条款和隐私说明》</a></span></p> <p><span>已有账号<a href="javascript:;" rel="external nofollow" rel="external nofollow" @click.prevent="handleLoginBtnClick">直接登入>></a></span></p> </component> </p> </template> <script> export default { methods: { handleRegisterBtnClick () { this.$refs.form.validateData().then(() => { this.$refs.form.getFormData() }) } } } </script>
mixinsmixing
Vueの組み込みコンポーネントコンポーネントを使用する場合、一般に、実際にレンダリングされるコンポーネントには、同じプロパティ、同じメソッド、同じ初期化および破棄プロセスなど、特定の共通点があります。たとえば、現在のシナリオでは、電子メール フォームと携帯電話フォームの両方に検証メソッド (validateData) とフォーム データを取得するメソッド (getFormData) があります。 この場合、vue が提供するミキシング機能を利用できます。さらなる抽象化 mixins.js
export default { methods: { validateData() { return Promise.resolve() }, getFormData() { return {} } } }
email-form.vue
<script> import minx from './mixins' export default { mixins: [mixins], methods: { getFormData() { return { email: 'example@example.com' } } } } </script>
カスタムのニーズがある場合は、ミックスインのメソッドをオーバーライドできます。
テーブルの応用
管理バックグラウンドプロジェクトでは、テーブルがよく使用されます。テーブルの td がテキスト、プログレスバー、チェックボックスなどであることを望み、json 設定を渡すことでレンダリングできることを望みます。 vue の組み込みコンポーネント コンポーネントを使用すると、大きな役割を果たすことができます。
例えばこんなテーブルの活用法
<template> <vue-table ref="table" :columns="columns" :datum="datum"></vue-table> </template> <script> export default { data () { return { columns: [ { title: 'ID', width: '30', dataKey: 'id' }, { title: '进度组件', dataKey: 'progress', render: { type: 'progress2', max: 100, precision: 2 } } ], datum: [{ id: '1', name: '进度0', progress: 10 }] } } } </script>
テーブルへのコンポーネントの実装
<td v-for="column of columns"> <component :is="`${TYPE_PRE}${columns.render.type}`" :row-data="rowData" :params="columns.render"></component> </td>
フォームの応用
管理バックグラウンドのプロジェクトではフォームがよく使われますが、私たちもフォーム上の項目の 1 つがテキスト ボックス、ドロップダウン ボックス、時間選択ボックス、リッチ テキストなどであり、json 構成を渡すことでレンダリングできることを願っています。 Vue の組み込みコンポーネントでも、このような美しいビジョンを実現できます。
たとえば、このようなフォームの使用法
<template> <c-form :cells="cells" ref="form"> <button class="button is-primary" :class="{ 'is-disabled': isSubmitBtnDisabled }" @click.prevent="submit">提交</button> </c-form> </template> <script> export default { computed: { cells () { return [ { field: 'name', label: '名称', type: 'textfield', attrs: { placeholder: '名称' }, validate: { required: { message: '请输入名称'} } }, { field: 'enable', label: '启用标志', type: 'dropdown', extra: {options: [{ label: '启用', value: 1 }, { label: '禁用', value: 2 }] } } ] } } } </script>
フォーム内でコンポーネントを使用する実装
<form> <c-form-cell v-for="cell of cellList" :key="cell.field" :field="cell.field"> <component :is="`${TYPE_PRE}${cell.type}`" :field="cell.field" :attrs="cell.attrs" :extra="cell.extra" :validate="cell.validate" :cells="cell.cells"> </component> </c-form-cell> </form>
フォームとテーブルは、VUEベースのバックエンドエンジンのオープンソースプロジェクトに実装されており、スターとフォークへようこそ。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
以上がVueの組み込みコンポーネントの適用手順の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。