国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

幾個你不知道的技巧助你寫出更優雅的vue.js代碼

來源:懂視網 責編:小采 時間:2020-11-27 22:13:23
文檔

幾個你不知道的技巧助你寫出更優雅的vue.js代碼

幾個你不知道的技巧助你寫出更優雅的vue.js代碼: 1. watch 與 computed 的巧妙結合 如上圖,一個簡單的列表頁面。 你可能會這么做: created(){ this.fetchData() }, watch: { keyword(){ this.fetchData() } } 如果參數比較多,比如上圖 關鍵字篩選, 區域篩選, 設備ID篩選, 分頁數, 每頁
推薦度:
導讀幾個你不知道的技巧助你寫出更優雅的vue.js代碼: 1. watch 與 computed 的巧妙結合 如上圖,一個簡單的列表頁面。 你可能會這么做: created(){ this.fetchData() }, watch: { keyword(){ this.fetchData() } } 如果參數比較多,比如上圖 關鍵字篩選, 區域篩選, 設備ID篩選, 分頁數, 每頁

1. watch 與 computed 的巧妙結合

如上圖,一個簡單的列表頁面。

你可能會這么做:

 created(){
 this.fetchData()
 },
 
 watch: {
 keyword(){
 this.fetchData()
 }
 }

如果參數比較多,比如上圖

  • 關鍵字篩選,
  • 區域篩選,
  • 設備ID篩選,
  • 分頁數,
  • 每頁幾條數據,
  • 可能會是這樣:

    data(){
     return {
     keyword:'',
     region:'',
     deviceId:'',
     page:1
     }
    },
    methods:{
     fetchData(paramrs={
     keyword:this.keyword,
     region:this.region,
     deviceId:this.deviceId,
     page:this.page,
     }){
     this.$http.get("/list",paramrs).then("do some thing")
     }
    },
    created(){
     this.fetchData()
    },
    watch: {
     keyword(data){
     this.keyword=data
     this.fetchData()
     },
     region(data){
     this.region=data
     this.fetchData()
     },
     deviceId(data){
     this.deviceId=data
     this.fetchData()
     },
     page(data){
     this.page=data
     this.fetchData()
     },
     requestParams(params){
     this.fetchData(params)
     }
    }

    不過這么寫,明顯有問題,主要是watch了很多參數,而且函數的處理都差不多,可以修改一下,通過methods處理

    data(){
     return {
     keyword:'',
     region:'',
     deviceId:'',
     page:1
     }
    },
    methods:{
     paramsChange(paramsName,paramsValue){
     this[paramsName]=paramsValue
     this.fetchData()
     },
     fetchData(paramrs={
     keyword:this.keyword,
     region:this.region,
     deviceId:this.deviceId,
     page:this.page,
     }){
     this.$http.get("/list",paramrs).then("do some thing")
     }
    },
    created(){
     this.fetchData()
    }

    當然這么寫,需要在模板里面每個參數change的地方綁定事件,并傳遞參數值,比如分頁change時:

    <el-pagination
     layout="total, prev, pager, next, jumper"
     :total="total"
     prev-text="上一頁"
     next-text="下一頁"
     @current-change="paramsChange('page',$event)"
     >
    </el-pagination>

    相比上面的各種watch,代碼明顯少了很多,但是還有一個問題,那就是要在template的很多地方綁定change事件。

    最后,當然是使用我們重點推薦的computed + watch

    data(){
     return {
     keyword:'',
     region:'',
     deviceId:'',
     page:1
     }
    },
    computed:{
     requestParams() {
     return {
     page: this.page,
     region: this.region,
     id: this.deviceId,
     keyword: this.keyword
     }
     }
    },
    methods:{
     fetchData(paramrs={
     keyword:this.keyword,
     region:this.region,
     deviceId:this.deviceId,
     page:this.page,
     }){
     this.$http.get("/list",paramrs).then("do some thing")
     }
    },
    watch: {
     requestParams: {
     handler: 'fetchData',
     immediate: true
     }
    },

    通過增加一個computed屬性,watch這個屬性并設置immediate為true,無需再手動綁定事件,相比之上的方法都要簡潔。當然,缺點就是對性能稍微有些影響,不過問題不大。

    2. 使用mixin提取公共部分

    很多列表頁其實使用的很多屬性都是一樣的,比如

  • 分頁 page
  • 數量 size
  • 搜索關鍵 字keyword
  • 表格數據 tableData
  • 這些公共的部分其實可以通過mixin來提取出來

    /**
     * mixin/table.js
     */
    export default {
     data() {
     return {
     keyword: '',
     requestKeyword: '',
     pages: 1,
     size: 10,
     total: 0,
     tableData: []
     }
     }
    }

    在要用到的頁面

    import mixin from '@/mixin/table'
    export default {
     mixins: [mixin],
     data() {
     return { 
     selectRegion: '',
     selectDevice: '',
     deviceList: [],
     }
     }
     /* 其他代碼 */
     ...

    3. 自動注冊全局組件

    正常情況下,我們需要使用一個我們自己封裝的組件時,需要先引入,再注冊,最后才能在template模板中使用。

    <template>
     <all-region :selectRegion="selectRegion" @region-change="selectRegion=$event"/>
    </template>
    
    <script>
    import AllRegion from './baseButton'
    
    export default {
     components: {
     AllRegion,
     }
    }
    </script> 

    當有多個頁面需要用到這些組件時,那么就需要在每個需要的頁面重復這些步驟。

    為了簡化這些步驟,可以考慮把這些組件作為全局組件來使用,這樣每個頁面需要時,就可以直接使用了。

    不過還有一個問題,那就是需要我們手動的全局注冊。

    /* main.js */
    import Component1 from '@/component/compenent1'
    import Component2 from '@/component/compenent2'
    import Component3 from '@/component/compenent3'
    
    Vue.component('component1', Component1)
    Vue.component('component2', Component2)
    Vue.component('component3', Component3)

    當組件多了以后,手動注冊也變得繁瑣起來,可以通過require.context()實現自動注冊組件。

    /**
     * main.js
     * 讀取componetns下的vue文件并自動注冊全局組件
     */
    const requireComponent = require.context('./components', false, /\.vue$/)
    
    requireComponent.keys().forEach(fileName => {
    
     const componentConfig = requireComponent(fileName)
     const componentName = fileName.replace(/^\.\//, '').replace(/\.vue/, '')
    
     Vue.component(componentName, componentConfig.default || componentConfig)
    })

    4. 自動注冊vuex模塊

    之前我們是這么注冊vuex模塊的

    /* module.js */
    
    import alarm from './modules/alarm'
    import history from './modules/history'
    import factory from './modules/factory'
    import contact from './modules/contact'
    import company from './modules/company';
    import deviceManage from './modules/device-manage'
    import deviceModel from './modules/device-model'
    import deviceActivation from './modules/device-activation'
    import user from './modules/user'
    import role from './modules/role'
    import setAlarm from './modules/setAlarm'
    import factoryMode from "./modules/factoryMode";
    import ScreenDeviceWatch from './modules/screen-device-watch'
    import ScreenDeviceForecast from './modules/screen-device-forecast'
    
    export default {
     alarm,
     company,
     deviceManage,
     deviceModel,
     user,
     factory,
     contact,
     deviceActivation,
     history,
     role,
     setAlarm,
     factoryMode,
     ScreenDeviceWatch,
     ScreenDeviceForecast,
    }
    
    /* index.js */
    import Vue from 'vue'
    import Vuex from 'vuex'
    
    import state from './state'
    import getters from './getters'
    import modules from './modules'
    import actions from './actions'
    import mutations from './mutations'
    
    Vue.use(Vuex)
    export default new Vuex.Store({
     state,
     getters,
     mutations,
     actions,
     modules
    })

    可以發現每個模塊都要我們手動導入,然后加入到module里面,如此重復。當模塊不多還好,假如項目大了,有50個模塊,那就得要做很多重復的工作。

    跟注冊組件一樣,我們還是利用require.context來實現。

    /**
     * 讀取./modules下的所有js文件并注冊模塊
     */
    const requireModule = require.context('./modules', false, /\.js$/)
    const modules = {}
    
    requireModule.keys().forEach(fileName => {
     const moduleName = fileName.replace(/(\.\/|\.js)/g, '') 
     modules[moduleName] = {
     namespaced: true,
     ...requireModule(fileName).default
     }
    })
    
    export default modules
    
    /* index.js */
    import Vue from 'vue'
    import Vuex from 'vuex'
    import modules from './modules'
    
    Vue.use(Vuex)
    export default new Vuex.Store({
     state,
     getters,
     mutations,
     actions,
     modules
    })

    這篇關于如何寫出更優雅的vue.js代碼的文章就介紹到這了,希望大家以后多多支持腳本之家。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    幾個你不知道的技巧助你寫出更優雅的vue.js代碼

    幾個你不知道的技巧助你寫出更優雅的vue.js代碼: 1. watch 與 computed 的巧妙結合 如上圖,一個簡單的列表頁面。 你可能會這么做: created(){ this.fetchData() }, watch: { keyword(){ this.fetchData() } } 如果參數比較多,比如上圖 關鍵字篩選, 區域篩選, 設備ID篩選, 分頁數, 每頁
    推薦度:
    標簽: 幾個 js 的技巧
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲 欧美 日韩在线 | 欧美日韩色| 久久久91精品国产一区二区 | 成人看免费一级毛片 | 一本久久精品一区二区 | 亚洲第一区视频 | 伊人一级 | 欧美另类在线观看 | 国产成人成人一区二区 | 国产欧美一区二区三区精品 | 免费国产线观看免费观看 | 欧美高清一区二区 | 国产情侣91 | 国产精品自拍一区 | 精品一区二区三区视频日产 | 亚洲欧美国产日本 | 亚洲色欧美 | 欧美精品一区二区在线观看 | 国产精品成人h片在线 | 一区二区三区免费在线 | 国产免费全部免费观看 | 国产a久久精品一区二区三区 | 国产成人精品第一区二区 | 亚洲精品二三区伊人久久 | 免费在线一区 | 色精品一区二区三区 | 日韩 综合 | 91精品专区| 国产精品成人h片在线 | 国产一区二区不卡视频 | 国产成人精品一区二三区 | 一区二区三区免费电影 | 国产日韩一区二区三区 | 日韩在线第三页 | 日韩精品一区二区三区视频 | 亚洲一区二区在线成人 | 亚洲视频在线观看视频 | 欧美日本一区二区三区 | 国产精品九九久久精品女同 | 中文国产成人精品久久app | 久久久噜噜噜www成人网 |