最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Vue內置component組件的應用場景

 更新時間:2018年03月27日 13:52:15   作者:nqdy666  
這篇文章主要介紹了淺談Vue內置component組件的應用場景,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

官方的說明

渲染一個“元組件”為動態(tài)組件。依 is 的值,來決定哪個組件被渲染。

<!-- 動態(tài)組件由 vm 實例的屬性值 `componentId` 控制 -->
<component :is="componentId"></component>

具體可以官網文檔中的

動態(tài)組件

 內置的組件component

場景

這里通過一個業(yè)務場景來闡述vue內置component組件的應用。 如圖所示,這里展示經典注冊頁面,注冊分為郵箱注冊和手機注冊,彈窗頂部有標簽可以切換注冊類型,中間是注冊表單信息,郵箱注冊和手機注冊有著不一樣的表單內容,底部是注冊按鈕以及其他操作。 經過分析手機注冊界面與郵箱注冊除了中間的表單內容不一致之外,其他的界面內容是一樣的。

實際項目代碼設計中,為了保證復用性和可維護性,是會有一些可行的方案。這里我們采用vue內置的component組件來實現這一點。

核心代碼實現

頂部tab切換的時候,type值發(fā)生改變,對應的表單的組件也發(fā)生了變化

<template>
 <div>
	<a href="javascript:;" rel="external nofollow" rel="external nofollow" @click.prevent="handleCloseBtnClick"></a>
	<div>
	 <h3>新用戶注冊</h3>
	 <div>
		<span :class="{active: type === 'mobileForm'}" @click="type = mobileForm">手機注冊</span>
		<span :class="{active: type === 'emailForm'}" @click="type = emailForm">郵箱注冊</span>
	 </div>
	</div>
	<component :is="type" ref="form">
	 <button @click="handleRegisterBtnClick">注冊</button>
	 <div ><span ><span>注冊視為同意</span><a> 《法律條款和隱私說明》</a></span></div>
	 <div><span>已有賬號<a href="javascript:;" rel="external nofollow" rel="external nofollow" @click.prevent="handleLoginBtnClick">直接登入>></a></span></div>
	</component>
 </div>
</template>
<script>
 export default {
 	methods: {
		handleRegisterBtnClick () {
		 	this.$refs.form.validateData().then(() => {
				this.$refs.form.getFormData()
			})
		 }
	}
 }
</script>

mixins混合

用Vue內置component組件情況下,一般實際被渲染的組件具有一定的共性,比如相同的屬性,相同的方法或者相同的初始化銷毀過程。比如目前這個場景中郵箱表單和手機表單都具有校驗方法(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>

如果有自定義的需求,可以重寫mixins中的方法。

表格的應用

在管理后臺項目中,表格經常會被用到。我們希望表格的td是文本、進度條、checkbox等等,且希望通過傳一個json配置就可以渲染出。使用vue內置的component組件可以起到很贊的作用。

 

比如這樣的一個table使用方式

<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>

table中使用component的實現

<td v-for="column of columns">
	<component :is="`${TYPE_PRE}${columns.render.type}`" :row-data="rowData" :params="columns.render"></component>
</td>

表單的應用

在管理后臺項目中,表單也經常需要用到,我們也同樣希望表單的某一項是文本框,下拉框,時間選擇框,富文本等等等等,且希望通過傳一個json配置就可以渲染出。vue內置的component組件可以依然可以實現這樣一個美好的愿景。

 

比如這樣的一個form使用方式

<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中使用component的實現

<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的后臺引擎 開源項目中都有實現,歡迎star和fork。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue transition的延時播放實踐過程

    vue transition的延時播放實踐過程

    文章介紹了如何使用JavaScript的`setTimeout`和Vue.js的`v-show`指令實現頁面自動播放,并通過CSS的`transition`和`animation`屬性控制動畫的播放時間
    2025-12-12
  • 使用Vant如何完成各種Toast提示框

    使用Vant如何完成各種Toast提示框

    這篇文章主要介紹了使用Vant如何完成各種Toast提示框,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • element tree樹形組件回顯數據問題解決

    element tree樹形組件回顯數據問題解決

    本文主要介紹了element tree樹形組件回顯數據問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Vue如何實現多頁面配置以及打包方式

    Vue如何實現多頁面配置以及打包方式

    這篇文章主要介紹了Vue如何實現多頁面配置以及打包方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue實現移動端input上傳視頻、音頻

    vue實現移動端input上傳視頻、音頻

    這篇文章主要為大家詳細介紹了vue實現移動端input上傳視頻、音頻,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Vue前端登錄token信息驗證功能實現

    Vue前端登錄token信息驗證功能實現

    最近公司新啟動了個項目,用的是vue框架在做,下面這篇文章主要給大家介紹了關于vue實現token登錄驗證的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 詳解Vue源碼學習之雙向綁定

    詳解Vue源碼學習之雙向綁定

    這篇文章主要介紹了Vue源碼學習之雙向綁定,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • 詳解vue跨組件通信的幾種方法

    詳解vue跨組件通信的幾種方法

    本篇文章主要介紹了詳解vue跨組件通信的幾種方法 ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • vue安裝less-loader依賴失敗問題及解決方案

    vue安裝less-loader依賴失敗問題及解決方案

    這篇文章主要介紹了vue安裝less-loader依賴失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解vue嵌套路由-query傳遞參數

    詳解vue嵌套路由-query傳遞參數

    本篇文章主要介紹了詳解vue嵌套路由-query傳遞參數,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05

最新評論

临夏县| 上虞市| 陕西省| 商丘市| 康定县| 南木林县| 南召县| 平潭县| 化州市| 尉氏县| 淳安县| 长岭县| 乌审旗| 江源县| 灵武市| 柯坪县| 兴义市| 许昌县| 济源市| 浦东新区| 莆田市| 武山县| 亳州市| 永吉县| 靖远县| 石棉县| 江达县| 菏泽市| 伊金霍洛旗| 盐津县| 青州市| 环江| 根河市| 正阳县| 贞丰县| 清河县| 信宜市| 江口县| 宁波市| 新安县| 略阳县|