1. 首页
  2. 技术知识

vue基础知识

基础认识

变量

  • 模板中使用变量用 {{}},也叫字面量或者插值表达式

数组

  • 类似python里的列表

listArray:[‘a’,’b’,’c’]
对象

  • 类似python里的字典

        listObject:{            GirlOne:’a’,            GirlTwo:’b’,            GirlThree:’c’        }'<div>{{counter}}</div>’
mounted

  • 页面加载渲染完成,自动执行的方法

mounted() {     console.log(‘页面加载完成后-自动执行’)},
v-on

  • 绑定事件
  • 简写就是@

v-if,v-else

  • 判断,它的作用是如果值为真,就显示这个DOM元素,如果为假,就不显示这个元素
  • 判断可以用三元运算符

:class=”message==’jspang.com’?’one’:’two'” template: `<h2 @click=”handleItemClick” v-if=”message==’jspang.com'” class=”one” > {{message}} </h2><h2 @click=”handleItemClick” v-else  class=”three”> {{message}} </h2>    `
v-for

  • 循环
  • 数组循环为了提高循环时性能,在数组其中一项变化后,整个数组不进行全部重新渲染,Vue提供了绑定key值的使用方法,目的就是增加渲染性能,避免重复渲染。加唯一性key值,增加后vue就会辨认出哪些内容被渲染后并没有变化,而只渲染新变化的内容。

<ul>    <li v-for=”(item,index)  in listArray” :key=”index+item”>        [{{index}}]{{item}}    </li></ul>

  • 对象循环

data(){    return{        listObject:{            GirlOne:’a’,            GirlTwo:’b’,            GirlThree:’c’        }    }}<ul>    <li v-for=”(value,key,index)  in listObject” :key=”key”>        [{{index}}]{{value}}-{{key}}    </li></ul>

  • 数字循环

<span v-for=”count in 99″>{{count}},</span>

  • v-for中使用v-if要用template标签,一个空的占位符。比如有三个值,只要其中两个,不用template的话,html里还是会出来三个。

<ul>    <template        v-for=”(item,index) in listArray”        :key=”index+item”    >    <li v-if=”item != ‘a'”>        [{{index}}]{{item}}    </li>    </template></ul>
Demo

<!DOCTYPE html><html lang=”en”><head>    <meta charset=”UTF-8″>    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>    <title>佳丽列表</title>    <script src=”https://unpkg.com/vue@next”></script></head><body>    <div id=”APP”></div></body><script>    Vue.createApp({        data() {            return {                inputValue: ”,                list: [‘1号’, ‘2号’, ‘3号’] ,                setMeal: ‘china america’,                isShowMeal: false ,            }        },        methods: {            handleAddItem() {                this.list.push(this.inputValue)                this.inputValue = ”            },             welcomeBtnClick(){                // alert(‘111’)                this.content = ‘huanying’            },            byeBtnClick(){                // alert(‘222’)                this.content = ‘baibai’            },            showOrHideBtnClick(){                this.isShowMeal = !this.isShowMeal  // 将操作者取反  false变成true            }        },        template: `        <div>            <div>                <button v-on:click=”welcomeBtnClick”>laila</button>                 <button v-on:click=”byeBtnClick”>zoula</button>                <div v-if=’isShowMeal’>{{setMeal}}</div>                    <button v-on:click=”showOrHideBtnClick”>show/not show</button>            </div>            <input v-model=”inputValue” />            <button v-on:click=”handleAddItem”>增加佳丽</button>            <ul>                <li v-for= “item of list”>{{item}}</li>            </ul>        </div>        `    }).mount(“#app”)</script></html>
v-html,v-bind,v-once

  • v-html 可以将变量返回html
  • v-once data中的数据如何变化,模板也不会再次重新渲染
  • v-bind 绑定属性,不绑定的话就是字符串,不会随数据变化,简写就是直接一个冒号

<h2 v-bind:title=”message2″>{{message2}}</h2><h2 :title=”message2″>{{message2}}</h2><script>    const app = Vue.createApp({        data() {            return {                message: ‘jspang.com’,                count: 5,                message2: ‘xxxxxx’            }        },        methods: {            handleItemClick() {                this.message = this.message == ‘jspang.com’ ? “技术胖” : “jspang.com”            }        },        template: `<h2                         v-on:click=”handleItemClick”                         v-html=”message”                        v-once                                            > </h2>                    <div>{{count>2?’大’:’小’}}</div> # 三元表达式 在模板中可以使用js的表达式                    <h2 v-bind:title=”message2″>{{message2}}</h2> # 不用v-bind title就是message2字符串                    `    })    const vm = app.mount(“#app”)</script>
v-show

  • v-show是单个判断,true就显示,false就不显示。
  • 控制的是css样式,也就是display:none。
  • 如果显示和隐藏的状态切换比较频繁,并且没有什么多余复杂的业务逻辑,建议使用v-show,因为他不会一直渲染你的页面DOM元素,这或多或少对性能和稳定性有点提升。

<script>    const app=Vue.createApp({     data(){        return{            show: true,        }    },    template:`        <h2 v-show=”show”>JSPang.com</h2>          `     })     const vm=app.mount(“#app”)</script>
vue的方法

createApp()

  • 创建一个vue应用

const app = Vue.createApp(){}
mount()

  • 挂载到html的dom上

app.mount(“#app”)
根组件vm

  • 在使用mount()方法时,会返回根组件。返回的是proxy形式的对象

mvvm

  • mvvm解释: 第一个m代表model数据,第一个v代表view视图,最后两个字幕vm代表viewModel视图数据连接层。

<script>    const app = Vue.createApp({        data() {            return {                message: ‘jspang.com’   //1.在这里定义了数据,也就是`model`数据            }        },        template: “<h2>{{message}}</h2>” //2.在这里定义了模板,也就是`view`,        //定义后的自动关联,就叫做`vm`,viewModel数据视图连接层。    })    app.mount(“#app”)</script>
生命周期函数

  • 在某一时间会自动执行的函数
  • 被动执行的函数,需要手动去点一下,才会执行

methods: {    handleItemClick() {        alert(‘jspang.com’)     } }, template: “<h2 v-on:click=’handleItemClick’>{{message}}</h2>”

  • 自动执行函数,mounted,没有任何操作,就会自动执行
  • 8个生命周期函数

beforeCreate():在实例生成之前会自动执行的函数created(): 在实例生成之后会自动执行的函数beforeMount(): 在模板渲染完成之前执行的函数mounted(): 在模板渲染完成之后执行的函数beforeUpdate() :当data中的数据变化时, 会立即自动执行的函数updated():当data中的数据发生变化,页面重新渲染完后,会自动执行的函数beforeUnmount() :当Vue应用失效时,会自动执行的函数unmounted() : 当Vue应用失效时,且DOM完全销毁之后,会自动执行
vue2和3生命周期函数对比

  • setup() :开始创建组件之前,在beforeCreate和created之前执行。创建的是data和method
  • onBeforeMount() : 组件挂载到节点上之前执行的函数。
  • onMounted() : 组件挂载完成后执行的函数。
  • onBeforeUpdate(): 组件更新之前执行的函数。
  • onUpdated(): 组件更新完成之后执行的函数。
  • onBeforeUnmount(): 组件卸载之前执行的函数。
  • onUnmounted(): 组件卸载完成后执行的函数
  • onActivated(): 被包含在中的组件,会多出两个生命周期钩子函数。被激活时执行。
  • onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行。
  • onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数(以后用到再讲,不好展现)。

Vue2————–vue3beforeCreate  -> setup()created       -> setup()beforeMount   -> onBeforeMountmounted       -> onMountedbeforeUpdate  -> onBeforeUpdateupdated       -> onUpdatedbeforeDestroy -> onBeforeUnmountdestroyed     -> onUnmountedactivated     -> onActivateddeactivated   -> onDeactivatederrorCaptured -> onErrorCaptured
模板的动态参数

  • 用[xxx] xxx表示变量名 这样就是动态参数

<script>    const app = Vue.createApp({        data() {            return {                message: ‘xxxx’,                name: ‘title’,                event: ‘click’            }        },        methods: {            hanldClick(){                alert(‘欢迎光临红浪漫’)        }        },        template:`                <h2                     @[event]=”hanldClick”   ## 等价于 v-on:click = ‘hanldClick’                    :[name]=”message”  ## 等价于 v-bind:title = ‘xxxx’                >                {{message}}                </h2>            `    })    const vm = app.mount(“#app”)</script>
阻止默认事件

  • prevent

<form     action=”https://jspang.com”     @click.prevent=”hanldeButton”>    <button type=”submit”>默认提交</button></form>
computed计算属性,watch监听器

  • 方法methods:只要页面重新渲染,就会重新执行方法,随便哪里更新了,就会更新
  • 计算属性computed:当计算属性依赖的内容发生变更时,才会重新执行计算。就是和他相关的东西变了,这个值才会变。必须要返回一个值,而且在页面渲染的同时就会执行里边的业务逻辑。computed擅长处理的场景:一个数据受多个数据影响
  • watch 侦听器的作用就是侦听一个data中的值的变化,变化后可以写一个方法,就是执行业务逻辑。watch擅长处理的场景:一个数据影响多个数据。界面渲染的时候不会执行,要等相关的数据变化后才执行。
  • computed 和 method都能实现的功能,建议使用computed,因为有缓存,不用渲染页面就刷新。
  • computed 和 watch 都能实现的功能,建议使用 computed,因为更加简洁。

<script>    const app=Vue.createApp({         data(){            return{                message:’jspang.com’ ,                 price: 10,                count: 2,            }        },        methods:{                        getTotal(){                // return this.price * (this.count++);                return Date.now()            },            addCount(){                this.count++            },        },        watch:{            count(current, prev){                console.log(‘count changed watch’)                console.log(‘现在的值watch:’,current)                console.log(‘变化前的值watch:’,prev)            }        },        computed:{            total(){                return this.price * this.count;            },            getTime(){                return Date.now();            },            countComputed(current, prev){                console.log(‘count changed  computed’)                console.log(‘现在的值computed:’,current)                console.log(‘变化前的值computed:’,prev)            }        },        template:`             <h2>{{getTime}}</h2>             <h2>{{getTotal()}}</h2>            <h2> {{total}}</h2>            <button @click=’addCount’>more</button>            <h2> {{countComputed}}</h2>        `    })     const vm=app.mount(“#app”)</script>
模板绑定样式

  • 用普通字符串进行绑定
  • 使用样式就是用v-bind绑定变量,变量就是定义好的样式名字
  • 用数组进行绑定,true代表绑定,false表示不绑定

<!DOCTYPE html><html lang=”en”><head>    <meta charset=”UTF-8″>    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>    <title>Demo14</title>    <script src=”https://unpkg.com/vue@next” ></script>    <style>        .red {color:red}        .green {color: green}        .background {background-color: yellow}        .redImport {color: red !important;}    </style></head><body>    <div id=”app”></div></body><script>    const app=Vue.createApp({         data(){            return {                classString:’red’,                classObject:{red:true,background:true},                 classArray1:[‘green’,’background’,{redImport:true}],                classArray2:[‘green’,’background’,{red:true}],            }        },        template:`            <h2 :class=”classArray1″>1</h2>              <h2 :class=”classArray2″>2</h2>          `     })     const vm=app.mount(“#app”)</script></html>

  • 组件,component来生成一个组件,可以在模板中直接调用

app.component(‘sonCom’,{    template:`        <div>SonCom</div>    `})template:`    <h2 :class=”classArray”>JSPang.com</h2>    <sonCom />`

  • 区分父子组件,被调用的是子组件,主动调用的就是父组件
  • 行内样式

data(){    return{       //…..        styleString:’color:orange;’,        styleObject:{            color:’red’,            background:’yellow’        }    }},template:`    <h2 :style=”styleString”>JSPang.com</h2>    <h2 :style=”styleObject”>JSPang.com</h2>`
绑定事件

方法和参数

  • 用methods实现
  • 用表达式实现
  • event事件,没参数就直接方法里用event,有参数的情况下,在使用的时候要穿$event
  • 调用两个方法要加上括号(),中间用逗号隔开

<script>    const app=Vue.createApp({     data(){        return{            count:0        }    },    methods:{    addCountClick(event){        this.count++;        console.log(event)        console.log(event.target)    },    addCountClick2(num,event){        this.count += num        console.log(event.target)    },    handleBtnClick1(){        alert(1)    },    handleBtnClick2(){        alert(2)    },},    template:`      <div>目前已点佳丽数量{{count}}.</div>      <button @click=addCountClick>增加一位佳丽</button>      <button @click=”count++”>增加一位佳丽2</button>      <button @click=addCountClick2(2,$event)>增加一位佳丽3</button>      <button @click=handleBtnClick1(),handleBtnClick2()>增加一位佳丽4</button>        `     })     const vm=app.mount(“#app”)</script>
事件修饰符

  • 冒泡事件,点add按钮,上面的handleBtnClick1方法也会触发,就是冒泡

    methods:{        addCountClick(){            this.count++        },        handleBtnClick1(){            alert(1)        },    },    template:`        <div @click=”handleBtnClick1″>            <div>number is{{count}}.</div>            <button @click=” addCountClick()”>add</button>       </div>       `

  • stop 阻止冒泡事件 <button @click.stop=” addCountClick()”>add</button>
  • self 只有点击道自己的时候才会触发

template:`        <div @click.self=”handleBtnClick1″>            点我            <div>目前已点佳丽数量{{count}}.</div>            <button @click=” addCountClick()”>增加一位佳丽</button>       </div>        `

  • preevent 阻止默认行为,如form提交表单
  • capture 默认的冒泡都是从下到上,用了capture之后就是从上到下

template:`    <div @click.capture=”handleBtnClick1″>  //修改了此处        我是最外层的DIV文字        <div>目前已点佳丽数量{{count}}.</div>        <button @click=” addCountClick()”>增加一位佳丽</button>    </div>    `

  • once 只执行一次

<button @click.once=”addCountClick()”>增加一位佳丽</button>

  • passive 解决滚动时性能的修饰符每次事件产生,浏览器都会去查询一下是否有preventDefault阻止该次事件的默认动作。我们加上passive就是为了告诉浏览器,不用查询了,我们没用preventDefault阻止默认动作。一般用在滚动监听,@scoll,@touchmove 。因为滚动监听过程中,移动每个像素都会产生一次事件,每次都使用内核线程查询prevent会使滑动卡顿。我们通过passive将内核线程查询跳过,可以大大提升滑动的流畅度passive和prevent冲突,不能同时绑定在一个监听器上

按键,鼠标修饰符

  • 按键修饰keydown表示按键,响应所有按键enter 、tab、delete、esc、up 、down、left、right 这些加上之后,表示响应单独的按键

<script>    const app=Vue.createApp({     data(){        return{}    },    methods:{        handleKeyDown(){            console.log(‘keydown’)        }    },    template:`        <div>            <input @keydown=”handleKeyDown”/>            <input @keydown.enter=”handleKeyDown”/>        </div>        `     })     const vm=app.mount(“#app”)</script>

  • 鼠标修饰符常用的就是 left、right、middle

<script>    const app=Vue.createApp({     data(){        return{}    },    methods:{            handleClick(){                alert(‘click’)            }        },    template:`            <div @click.right=”handleClick”>xxxxxx</div>        `     })     const vm=app.mount(“#app”)</script>
数据双向绑定

v-model

  • input 双向绑定
  • textarea 双向绑定vue中只要写单标签就行了,html还是要写双标签
  • checkbox 双向绑定一个选项,设置一个布尔值来表示多个选项直接可以直接用数组来表示true-value,false-value。true的时候显示的值,和false的时候显示的值
  • radio 双向绑定直接定义一个str字面量
  • 修饰符lazy,失去焦点再进行改变,比如按了enter,才会更新number 输入的是数字,也会变成字符串trim 自动删除前后的空格,字符中间的不会删除

<script>    const app=Vue.createApp({     data(){        return{            name: ”,            list: [],            checked:false,            str: ”,            testAreaName: ”        }    },    methods:{    },    template:`        <div>            <div>{{name}}</div>            <input v-model=”name” />            <div>{{checked}}<input type=”checkbox” v-model=”checked” /></div>            <div>                <div>{{testAreaName}}</div>                <div><textarea v-model=”testAreaName” /></div>              </div>            <div>                {{list}}                a<input type=”checkbox” v-model=”list” value=”a” />                b<input type=”checkbox” v-model=”list” value=”b” />                c<input type=”checkbox” v-model=”list” value=”c” />            </div>            <div>                {{str}}                a<input type=”radio” v-model=”str” value=”a” />                b<input type=”radio” v-model=”str” value=”b” />                c<input type=”radio” v-model=”str” value=”c” />            </div>        </div>        `     })     const vm=app.mount(“#app”)</script>[toc]


基础认识

变量

  • 模板中使用变量用 {{}},也叫字面量或者插值表达式

数组

  • 类似python里的列表

listArray:[‘a’,’b’,’c’]
对象

  • 类似python里的字典

        listObject:{            GirlOne:’a’,            GirlTwo:’b’,            GirlThree:’c’        }'<div>{{counter}}</div>’
mounted

  • 页面加载渲染完成,自动执行的方法

mounted() {     console.log(‘页面加载完成后-自动执行’)},
v-on

  • 绑定事件
  • 简写就是@

v-if,v-else

  • 判断,它的作用是如果值为真,就显示这个DOM元素,如果为假,就不显示这个元素
  • 判断可以用三元运算符

:class=”message==’jspang.com’?’one’:’two'” template: `<h2 @click=”handleItemClick” v-if=”message==’jspang.com'” class=”one” > {{message}} </h2><h2 @click=”handleItemClick” v-else  class=”three”> {{message}} </h2>    `
v-for

  • 循环
  • 数组循环为了提高循环时性能,在数组其中一项变化后,整个数组不进行全部重新渲染,Vue提供了绑定key值的使用方法,目的就是增加渲染性能,避免重复渲染。加唯一性key值,增加后vue就会辨认出哪些内容被渲染后并没有变化,而只渲染新变化的内容。

<ul>    <li v-for=”(item,index)  in listArray” :key=”index+item”>        [{{index}}]{{item}}    </li></ul>

  • 对象循环

data(){    return{        listObject:{            GirlOne:’a’,            GirlTwo:’b’,            GirlThree:’c’        }    }}<ul>    <li v-for=”(value,key,index)  in listObject” :key=”key”>        [{{index}}]{{value}}-{{key}}    </li></ul>

  • 数字循环

<span v-for=”count in 99″>{{count}},</span>

  • v-for中使用v-if要用template标签,一个空的占位符。比如有三个值,只要其中两个,不用template的话,html里还是会出来三个。

<ul>    <template        v-for=”(item,index) in listArray”        :key=”index+item”    >    <li v-if=”item != ‘a'”>        [{{index}}]{{item}}    </li>    </template></ul>
Demo

<!DOCTYPE html><html lang=”en”><head>    <meta charset=”UTF-8″>    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>    <title>佳丽列表</title>    <script src=”https://unpkg.com/vue@next”></script></head><body>    <div id=”app”></div></body><script>    Vue.createApp({        data() {            return {                inputValue: ”,                list: [‘1号’, ‘2号’, ‘3号’] ,                setMeal: ‘china america’,                isShowMeal: false ,            }        },        methods: {            handleAddItem() {                this.list.push(this.inputValue)                this.inputValue = ”            },             welcomeBtnClick(){                // alert(‘111’)                this.content = ‘huanying’            },            byeBtnClick(){                // alert(‘222’)                this.content = ‘baibai’            },            showOrHideBtnClick(){                this.isShowMeal = !this.isShowMeal  // 将操作者取反  false变成true            }        },        template: `        <div>            <div>                <button v-on:click=”welcomeBtnClick”>laila</button>                 <button v-on:click=”byeBtnClick”>zoula</button>                <div v-if=’isShowMeal’>{{setMeal}}</div>                    <button v-on:click=”showOrHideBtnClick”>show/not show</button>            </div>            <input v-model=”inputValue” />            <button v-on:click=”handleAddItem”>增加佳丽</button>            <ul>                <li v-for= “item of list”>{{item}}</li>            </ul>        </div>        `    }).mount(“#app”)</script></html>
v-html,v-bind,v-once

  • v-html 可以将变量返回html
  • v-once data中的数据如何变化,模板也不会再次重新渲染
  • v-bind 绑定属性,不绑定的话就是字符串,不会随数据变化,简写就是直接一个冒号

<h2 v-bind:title=”message2″>{{message2}}</h2><h2 :title=”message2″>{{message2}}</h2><script>    const app = Vue.createApp({        data() {            return {                message: ‘jspang.com’,                count: 5,                message2: ‘xxxxxx’            }        },        methods: {            handleItemClick() {                this.message = this.message == ‘jspang.com’ ? “技术胖” : “jspang.com”            }        },        template: `<h2                         v-on:click=”handleItemClick”                         v-html=”message”                        v-once                                            > </h2>                    <div>{{count>2?’大’:’小’}}</div> # 三元表达式 在模板中可以使用js的表达式                    <h2 v-bind:title=”message2″>{{message2}}</h2> # 不用v-bind title就是message2字符串                    `    })    const vm = app.mount(“#app”)</script>
v-show

  • v-show是单个判断,true就显示,false就不显示。
  • 控制的是css样式,也就是display:none。
  • 如果显示和隐藏的状态切换比较频繁,并且没有什么多余复杂的业务逻辑,建议使用v-show,因为他不会一直渲染你的页面DOM元素,这或多或少对性能和稳定性有点提升。

<script>    const app=Vue.createApp({     data(){        return{            show: true,        }    },    template:`        <h2 v-show=”show”>JSPang.com</h2>          `     })     const vm=app.mount(“#app”)</script>
vue的方法

createApp()

  • 创建一个vue应用

const app = Vue.createApp(){}
mount()

  • 挂载到html的dom上

app.mount(“#app”)
根组件vm

  • 在使用mount()方法时,会返回根组件。返回的是proxy形式的对象

mvvm

  • mvvm解释: 第一个m代表model数据,第一个v代表view视图,最后两个字幕vm代表viewModel视图数据连接层。

<script>    const app = Vue.createApp({        data() {            return {                message: ‘jspang.com’   //1.在这里定义了数据,也就是`model`数据            }        },        template: “<h2>{{message}}</h2>” //2.在这里定义了模板,也就是`view`,        //定义后的自动关联,就叫做`vm`,viewModel数据视图连接层。    })    app.mount(“#app”)</script>
生命周期函数

  • 在某一时间会自动执行的函数
  • 被动执行的函数,需要手动去点一下,才会执行

methods: {    handleItemClick() {        alert(‘jspang.com’)     } }, template: “<h2 v-on:click=’handleItemClick’>{{message}}</h2>”

  • 自动执行函数,mounted,没有任何操作,就会自动执行
  • 8个生命周期函数

beforeCreate():在实例生成之前会自动执行的函数created(): 在实例生成之后会自动执行的函数beforeMount(): 在模板渲染完成之前执行的函数mounted(): 在模板渲染完成之后执行的函数beforeUpdate() :当data中的数据变化时, 会立即自动执行的函数updated():当data中的数据发生变化,页面重新渲染完后,会自动执行的函数beforeUnmount() :当Vue应用失效时,会自动执行的函数unmounted() : 当Vue应用失效时,且DOM完全销毁之后,会自动执行
vue2和3生命周期函数对比

  • setup() :开始创建组件之前,在beforeCreate和created之前执行。创建的是data和method
  • onBeforeMount() : 组件挂载到节点上之前执行的函数。
  • onMounted() : 组件挂载完成后执行的函数。
  • onBeforeUpdate(): 组件更新之前执行的函数。
  • onUpdated(): 组件更新完成之后执行的函数。
  • onBeforeUnmount(): 组件卸载之前执行的函数。
  • onUnmounted(): 组件卸载完成后执行的函数
  • onActivated(): 被包含在中的组件,会多出两个生命周期钩子函数。被激活时执行。
  • onDeactivated(): 比如从 A 组件,切换到 B 组件,A 组件消失时执行。
  • onErrorCaptured(): 当捕获一个来自子孙组件的异常时激活钩子函数(以后用到再讲,不好展现)。

Vue2————–vue3beforeCreate  -> setup()created       -> setup()beforeMount   -> onBeforeMountmounted       -> onMountedbeforeUpdate  -> onBeforeUpdateupdated       -> onUpdatedbeforeDestroy -> onBeforeUnmountdestroyed     -> onUnmountedactivated     -> onActivateddeactivated   -> onDeactivatederrorCaptured -> onErrorCaptured
模板的动态参数

  • 用[xxx] xxx表示变量名 这样就是动态参数

<script>    const app = Vue.createApp({        data() {            return {                message: ‘xxxx’,                name: ‘title’,                event: ‘click’            }        },        methods: {            hanldClick(){                alert(‘欢迎光临红浪漫’)        }        },        template:`                <h2                     @[event]=”hanldClick”   ## 等价于 v-on:click = ‘hanldClick’                    :[name]=”message”  ## 等价于 v-bind:title = ‘xxxx’                >                {{message}}                </h2>            `    })    const vm = app.mount(“#app”)</script>
阻止默认事件

  • prevent

<form     action=”https://jspang.com”     @click.prevent=”hanldeButton”>    <button type=”submit”>默认提交</button></form>
computed计算属性,watch监听器

  • 方法methods:只要页面重新渲染,就会重新执行方法,随便哪里更新了,就会更新
  • 计算属性computed:当计算属性依赖的内容发生变更时,才会重新执行计算。就是和他相关的东西变了,这个值才会变。必须要返回一个值,而且在页面渲染的同时就会执行里边的业务逻辑。computed擅长处理的场景:一个数据受多个数据影响
  • watch 侦听器的作用就是侦听一个data中的值的变化,变化后可以写一个方法,就是执行业务逻辑。watch擅长处理的场景:一个数据影响多个数据。界面渲染的时候不会执行,要等相关的数据变化后才执行。
  • computed 和 method都能实现的功能,建议使用computed,因为有缓存,不用渲染页面就刷新。
  • computed 和 watch 都能实现的功能,建议使用 computed,因为更加简洁。

<script>    const app=Vue.createApp({         data(){            return{                message:’jspang.com’ ,                 price: 10,                count: 2,            }        },        methods:{                        getTotal(){                // return this.price * (this.count++);                return Date.now()            },            addCount(){                this.count++            },        },        watch:{            count(current, prev){                console.log(‘count changed watch’)                console.log(‘现在的值watch:’,current)                console.log(‘变化前的值watch:’,prev)            }        },        computed:{            total(){                return this.price * this.count;            },            getTime(){                return Date.now();            },            countComputed(current, prev){                console.log(‘count changed  computed’)                console.log(‘现在的值computed:’,current)                console.log(‘变化前的值computed:’,prev)            }        },        template:`             <h2>{{getTime}}</h2>             <h2>{{getTotal()}}</h2>            <h2> {{total}}</h2>            <button @click=’addCount’>more</button>            <h2> {{countComputed}}</h2>        `    })     const vm=app.mount(“#app”)</script>
模板绑定样式

  • 用普通字符串进行绑定
  • 使用样式就是用v-bind绑定变量,变量就是定义好的样式名字
  • 用数组进行绑定,true代表绑定,false表示不绑定

<!DOCTYPE html><html lang=”en”><head>    <meta charset=”UTF-8″>    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″>    <title>Demo14</title>    <script src=”https://unpkg.com/vue@next” ></script>    <style>        .red {color:red}        .green {color: green}        .background {background-color: yellow}        .redImport {color: red !important;}    </style></head><body>    <div id=”app”></div></body><script>    const app=Vue.createApp({         data(){            return {                classString:’red’,                classObject:{red:true,background:true},                 classArray1:[‘green’,’background’,{redImport:true}],                classArray2:[‘green’,’background’,{red:true}],            }        },        template:`            <h2 :class=”classArray1″>1</h2>              <h2 :class=”classArray2″>2</h2>          `     })     const vm=app.mount(“#app”)</script></html>

  • 组件,component来生成一个组件,可以在模板中直接调用

app.component(‘sonCom’,{    template:`        <div>SonCom</div>    `})template:`    <h2 :class=”classArray”>JSPang.com</h2>    <sonCom />`

  • 区分父子组件,被调用的是子组件,主动调用的就是父组件
  • 行内样式

data(){    return{       //…..        styleString:’color:orange;’,        styleObject:{            color:’red’,            background:’yellow’        }    }},template:`    <h2 :style=”styleString”>JSPang.com</h2>    <h2 :style=”styleObject”>JSPang.com</h2>`
绑定事件

方法和参数

  • 用methods实现
  • 用表达式实现
  • event事件,没参数就直接方法里用event,有参数的情况下,在使用的时候要穿$event
  • 调用两个方法要加上括号(),中间用逗号隔开

<script>    const app=Vue.createApp({     data(){        return{            count:0        }    },    methods:{    addCountClick(event){        this.count++;        console.log(event)        console.log(event.target)    },    addCountClick2(num,event){        this.count += num        console.log(event.target)    },    handleBtnClick1(){        alert(1)    },    handleBtnClick2(){        alert(2)    },},    template:`      <div>目前已点佳丽数量{{count}}.</div>      <button @click=addCountClick>增加一位佳丽</button>      <button @click=”count++”>增加一位佳丽2</button>      <button @click=addCountClick2(2,$event)>增加一位佳丽3</button>      <button @click=handleBtnClick1(),handleBtnClick2()>增加一位佳丽4</button>        `     })     const vm=app.mount(“#app”)</script>
事件修饰符

  • 冒泡事件,点add按钮,上面的handleBtnClick1方法也会触发,就是冒泡

    methods:{        addCountClick(){            this.count++        },        handleBtnClick1(){            alert(1)        },    },    template:`        <div @click=”handleBtnClick1″>            <div>number is{{count}}.</div>            <button @click=” addCountClick()”>add</button>       </div>       `

  • stop 阻止冒泡事件 <button @click.stop=” addCountClick()”>add</button>
  • self 只有点击道自己的时候才会触发

template:`        <div @click.self=”handleBtnClick1″>            点我            <div>目前已点佳丽数量{{count}}.</div>            <button @click=” addCountClick()”>增加一位佳丽</button>       </div>        `

  • preevent 阻止默认行为,如form提交表单
  • capture 默认的冒泡都是从下到上,用了capture之后就是从上到下

template:`    <div @click.capture=”handleBtnClick1″>  //修改了此处        我是最外层的DIV文字        <div>目前已点佳丽数量{{count}}.</div>        <button @click=” addCountClick()”>增加一位佳丽</button>    </div>    `

  • once 只执行一次

<button @click.once=”addCountClick()”>增加一位佳丽</button>

  • passive 解决滚动时性能的修饰符每次事件产生,浏览器都会去查询一下是否有preventDefault阻止该次事件的默认动作。我们加上passive就是为了告诉浏览器,不用查询了,我们没用preventDefault阻止默认动作。一般用在滚动监听,@scoll,@touchmove 。因为滚动监听过程中,移动每个像素都会产生一次事件,每次都使用内核线程查询prevent会使滑动卡顿。我们通过passive将内核线程查询跳过,可以大大提升滑动的流畅度passive和prevent冲突,不能同时绑定在一个监听器上

按键,鼠标修饰符

  • 按键修饰keydown表示按键,响应所有按键enter 、tab、delete、esc、up 、down、left、right 这些加上之后,表示响应单独的按键

<script>    const app=Vue.createApp({     data(){        return{}    },    methods:{        handleKeyDown(){            console.log(‘keydown’)        }    },    template:`        <div>            <input @keydown=”handleKeyDown”/>            <input @keydown.enter=”handleKeyDown”/>        </div>        `     })     const vm=app.mount(“#app”)</script>

  • 鼠标修饰符常用的就是 left、right、middle

<script>    const app=Vue.createApp({     data(){        return{}    },    methods:{            handleClick(){                alert(‘click’)            }        },    template:`            <div @click.right=”handleClick”>xxxxxx</div>        `     })     const vm=app.mount(“#app”)</script>
数据双向绑定

v-model

  • input 双向绑定
  • textarea 双向绑定vue中只要写单标签就行了,html还是要写双标签
  • checkbox 双向绑定一个选项,设置一个布尔值来表示多个选项直接可以直接用数组来表示true-value,false-value。true的时候显示的值,和false的时候显示的值
  • radio 双向绑定直接定义一个str字面量
  • 修饰符lazy,失去焦点再进行改变,比如按了enter,才会更新number 输入的是数字,也会变成字符串trim 自动删除前后的空格,字符中间的不会删除

<script>    const app=Vue.createApp({     data(){        return{            name: ”,            list: [],            checked:false,            str: ”,            testAreaName: ”        }    },    methods:{    },    template:`        <div>            <div>{{name}}</div>            <input v-model=”name” />            <div>{{checked}}<input type=”checkbox” v-model=”checked” /></div>            <div>                <div>{{testAreaName}}</div>                <div><textarea v-model=”testAreaName” /></div>              </div>            <div>                {{list}}                a<input type=”checkbox” v-model=”list” value=”a” />                b<input type=”checkbox” v-model=”list” value=”b” />                c<input type=”checkbox” v-model=”list” value=”c” />            </div>            <div>                {{str}}                a<input type=”radio” v-model=”str” value=”a” />                b<input type=”radio” v-model=”str” value=”b” />                c<input type=”radio” v-model=”str” value=”c” />            </div>        </div>        `     })     const vm=app.mount(“#app”)</script>

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/126419.html

联系我们