vue實(shí)現(xiàn)公共方法抽離
demo:制作一個(gè)點(diǎn)擊按鈕增加或者減少數(shù)字
現(xiàn)在vue組件內(nèi)部測(cè)試一下功能
<template> <div class="all"> <p>還未抽離</p> <button @click="SubNum()">-</button> <input type="number" v-model="number"> <button @click="AddNum()">+</button> </div> </template> <script> export default { data() { return { number: 0 }; }, methods: { SubNum() { this.number--; if (this.number <= 0) { this.number = 0; } }, AddNum() { this.number++; if (this.number > 10) { this.number = 10; } } } }; </script>
效果還可以,至少方法是對(duì)的,接下來(lái)進(jìn)行方法抽離和傳送參數(shù)
首先新建一個(gè)js文件 common.js
用es6的export default將方法導(dǎo)出
export default { AddNum:function(){ console.log(1) }, SubNum:function(){ console.log(2) } }
在main.js中用import將文件導(dǎo)入
import Common from './common'
聲明全局common
Vue.prototype.common = Common
現(xiàn)在組件內(nèi)只剩button和input,方法已經(jīng)剪切出去
<template> <div class="all"> <p>即將抽離</p> <button @click="common.SubNum()">-</button> <input type="number" v-model="number"> <button @click="common.AddNum()">+</button> </div> </template> <script> export default { data() { return { number: 0 }; }, methods: {} }; </script> <style lang="scss" scoped type="text/css"> </style>
點(diǎn)擊打印1或者2
證明方法是行得通的,現(xiàn)在將組件內(nèi)的參數(shù)傳送到方法里
傳參通過(guò)鉤子函數(shù)內(nèi)傳過(guò)去,因?yàn)橐壎c(diǎn)擊事件,所以直接在methods定義一個(gè)方法
<template> <div class="all"> <p>已經(jīng)抽離</p> <button @click="add(booleans)">-</button> <input type="number" v-model="number"> <button @click="add(!booleans)">+</button> </div> </template> <script> export default { data() { return { number: 0, booleans: false }; }, mounted() {}, methods: { //判斷點(diǎn)擊的是加還是減 add(booleans) { this.number = this.common.func(this.number,booleans); } } }; </script> <style lang="scss" scoped type="text/css"> </style>
這時(shí)公共方法已經(jīng)簡(jiǎn)化,這樣的話(huà) 在組件中看的比較簡(jiǎn)潔
export default { func(num,booleans){ if(booleans){ num++ if(num>=10){ return 10 } }else{ num-- if(num<=0){ return 0 } } return num } }
<--------文末------------>
有一個(gè)坑
<button @click="common.SubNum(number)">-</button> <input type="number" v-model="number"> <button @click="common.AddNum(number)">+</button> // export default { AddNum:function(num){ num++ if(num>=10){ return 10 } console.log(num) return num }, SubNum:function(num){ num-- if(num<=0){ console.log(num) return 0 } return num } }
這個(gè)是剛開(kāi)始抽離方法 直接在@click內(nèi)傳參
但是點(diǎn)擊事件并沒(méi)有將input的內(nèi)容修改
我的理解是只是將參數(shù)傳到方法里 但是方法改變參數(shù)時(shí)并未改變input綁定的this.number
不知道各位大神有什么見(jiàn)解或者建議,共同學(xué)習(xí),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家!
相關(guān)文章
Vue自定義全局Toast和Loading的實(shí)例詳解
這篇文章主要介紹了Vue自定義全局Toast和Loading,需要的朋友可以參考下2019-04-04vue報(bào)錯(cuò)之exports is not defined問(wèn)題的解決
這篇文章主要介紹了vue報(bào)錯(cuò)之exports is not defined問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Vue3?中路由Vue?Router?的使用實(shí)例詳解
vue-router是vue.js官方給出的路由解決方案,能夠輕松的管理SPA項(xiàng)目中組件的切換,這篇文章主要介紹了Vue3?中路由Vue?Router?的使用,需要的朋友可以參考下2023-02-02vue2+elementUI的el-tree的選中、高亮、定位功能的實(shí)現(xiàn)
這篇文章主要介紹了vue2+elementUI的el-tree的選中、高亮、定位功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09Vue3中關(guān)于ref和reactive的區(qū)別分析
這篇文章主要介紹了vue3關(guān)于ref和reactive的區(qū)別分析,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-06-06使用electron-builder將項(xiàng)目打包成桌面程序的詳細(xì)教程
這篇文章主要介紹了使用electron-builder把web端的項(xiàng)目打包生成桌面程序,并可安裝程序,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-08-08vue項(xiàng)目中如何將當(dāng)前頁(yè)面生成圖片
這篇文章主要介紹了vue項(xiàng)目中如何將當(dāng)前頁(yè)面生成圖片問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10