vue常用事件

vue解决警告提醒``

全局配置设置关闭 Vue.config.productionTip = false

vue阻止事件冒泡

@click.stop=“showMessge”
// 阻止冒泡、默认事件连用
@click.stop.prevent=“showMessge”
//只触发一次事件
@click.once=“showMessge”

vue阻止键盘事件(在最后按下键位在触发)

@keyup.enter=“showMessge”

详解Vue中的监视属性

watch: {
  isSunny: {
    immediate:true, // 开启初始化调用
    deep:true,      // 开启深度监视
    handler() {
      this.plan = this.isSunny ? '打蓝球' : '敲代码';
    },
  },
}

被监视的属性发生改变时,调用回调函数,执行相关操作
配置immediate:true实现初始化调用
监视的属性须存在才能进行监视

深度监视

Vue自身可以监测到多层数据的改变,但是在watch中不可以(只能监测简单的数据类型)
在watch中配置deep:true可以监测多维数据,根据具体数据结构决定是否采用深度监视

简写:
watch: {
  isSunny() {
    this.plan = this.isSunny ? '打球' : '敲代码';
  },
}
// 注意vue所管理的函数都应写成普通函数,不被vue管理的(定时器,ajax回调函数,promise回调函数)最好写成箭头函数

Vue中class样式的动态绑定

对象写在data中:
<div :class="list">通过对象写法绑定</div>
​
data: {
  list: {
    bg_red: 'bg_red',
    border: 'border',
  },
}

数组写法
使用场景:
需要绑定的样式个数不确定,类名也不确定
内联写法

 <div :class="[xd_border,xd_bg]">内联绑定样式</div>

数组里加三元表达式

<div :class="[isActive?xd_border:'',xd_bg]">三元表达式判断写法</div> 

写在data中

<div :class="list">在data中使用数组写法绑定</div>
data:{
  list:['border', 'bg_red']
}   

style写法

<div :style="{fontSize:'30px',color:aa}">直接在style中加入样式</div>

详解Vue中的条件渲染

v-if 写法

<p v-if="dice===1">打篮球</p>
<p v-else-if="dice===2">敲代码</p>
<p v-else-if="dice===3">游泳</p>
<p v-else>约会</p>
​
data: {
  dice: '',
},
methods: {
  throwFun() {
    this.dice = Math.floor(Math.random() * 4);
    console.log(this.dice);
  },
},

特点
— 语法和原生js的if…else if…else一样
— 不展示时直接移除DOM元素,适合切换频率低的场景
— v-if、v-else-if、v-else要连用

v-show 写法

<p v-show="dice===1">约会</p>

特点
—不展示时使用样式隐藏,适合切换频率高的场景

v-if 对比 v-show

一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。

如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

Vue中列表排序

对商品列表进行排序
在这里插入图片描述

<input type="text" v-model="inputValue" />
<button @click="keyWord=1">降序</button>
<button @click="keyWord=2">升序</button>
<button @click="keyWord=0">原顺序</button>
<ul>
  <li v-for="item in newList">{
   
   {item.name}}-{
   
   {item.price}}</li>
</ul>
new Vue({
  el: '#app',
  data: {
    keyWord: 0,
    inputValue: '',
    list: [
      { name: '牛仔裤', price: 88 },
      { name: '运动裤', price: 67 },
      { name: '羽绒服', price: 128 },
      { name: '运动服', price: 100 },
    ],
  },
  computed: {
    newList() {
      const arr1 = this.list.filter((i) => {
        return i.name.indexOf(this.inputValue) !== -1;
      });
      if (this.keyWord) {
        arr1.sort((a1, a2) => {
          return this.keyWord === 1
            ? a1.price - a2.price
            : a2.price - a1.price;
        });
      }
      return arr1;
    },
  },
})

在vue中引入less

cnpm install less less-loader@7 --save-dev

<style lang="less" scoped> 
scoped是指写的样式只在当前文件中生效,其他文件不生效

猜你喜欢

转载自blog.csdn.net/weixin_46426412/article/details/128909313