Vue3知识总结-2

目录

通过key来管理状态

事件处理

内联事件处理器

方法事件处理器

事件传参

获取event

传递参数

传参的过程中获取事件对象

事件修饰符

阻止事件描述符

阻止事件冒泡

数组变化侦测

变更方式

替换一个数组

计算属性

Class绑定

绑定对象

绑定数组

Style绑定

侦听器

表单输入绑定

修饰符


这里是第二次发的关于学习Vue的一些知识点,都是一些比较实用点。

通过key来管理状态

当使用v-for渲染之后,如果数据项顺序改变,Vue不会随着dom元素顺序移动,而是就地更新元素,确保在原本指定的位置上渲染。为了方便跟踪,所以要为每个元素对应的块提供一个唯一的key。

key通过v-bind绑定属性,推荐在什么时候都能使用,是一个基础类型的值。

因为顺序会发生变化,所以不推荐用index,应该使用唯一索引。

复制代码
javascript 复制代码
<template>
  <h3>列表渲染</h3>

  <p v-for="(value, key, index) of user">{{index}}-{{key}}-{{value}}</p>
  <div v-for="item of result" :key="item.id">
    <p>{{item.title}}</p>
  </div>
</template>
<script>
  export default {
    data() {
      return{
        user:{
          name: ["2132",123214],
          age: 13,
        },
        result: [
          {
            "id": 1,
            "title": "133",
          },
          {
            "id":2,
            "title":"123",
          }
        ]
      }

    }
  }
</script>

事件处理

使用v-on来监听事件,事件处理分为

  1. 内联:事件被触发的时候执行内联语句

  2. 方法:一个指向组件上定义的方法的属性名或是路径

内联事件处理器

复制代码
javascript 复制代码
<template>
 <h3>内联事件处理器</h3>
  <button @click="count++"> Add</button>
  <p>{{count}}</p>
</template>

<script>

export default{
  data(){
    return{
      count: 0
    }
  }
}

</script>

<style scoped>

</style>

方法事件处理器

复制代码
javascript 复制代码
<template>
 <h3>方法事件处理器</h3>
  <button @click="addCount"> Add</button>
  <p>{{count}}</p>
</template>

<script>

export default{
  data(){
    return{
      count: 0
    }
  },
  methods:{
    addCount(){
      //在这里进行操作
      this.count++
      console.log("点击了")
    }
  }

}

</script>

<style scoped>

</style>

事件传参

事件参数可以获取event对象和通过事件传递数据

获取event

复制代码
javascript 复制代码
<template>
  <h3>方法事件处理器</h3>
  <button @click="addCount"> Add</button>
  <p>{{count}}</p>
</template>

<script>

export default{
  data(){
    return{
      count: 0
    }
  },
  methods:{
    addCount(e){
      e.target.innerHTML = "aadd" + this.count
      this.count++

    }
  }

}

</script>

<style scoped>

</style>

传递参数

复制代码
javascript 复制代码
<template>
  <h3>事件传参</h3>
  <p @click= "getNameHandler(item)" v-for="(item, index) of names" :key="index">{{item}}</p>
</template>

<script>

export default {
  data() {
    return {
      names: ["bob", "jack", "marry"]
    }
  },
  methods: {
    getNameHandler(name){
      console.log(name)
    }
  }

}

</script>

<style scoped>

</style>

传参的过程中获取事件对象

复制代码
javascript 复制代码
<template>
  <h3>事件传参</h3>
  <p @click= "getNameHandler(item, $event)" v-for="(item, index) of names" :key="index">{{item}}</p>
</template>

<script>

export default {
  data() {
    return {
      names: ["bob", "jack", "marry"]
    }
  },
  methods: {
    getNameHandler(name, e){
      console.log(name)
      console.log(e)
    }
  }

}

</script>

<style scoped>

</style>

事件修饰符

在处理事件的时候,调用方法很常见,为了能够更好的去处理事件的逻辑有了事件修饰符很多的可以在官网上查看

阻止事件描述符

复制代码
javascript 复制代码
<template>
 <h3>事件描述符</h3>
<!--  //这里可以之间使用-->
  <a @click.prevent="clickHandle" href="https://www.bilibili.com/video/BV1Rs4y127j8?p=13&spm_id_from=pageDriver&vd_source=2a222b50c15b9af66c7ffac6c7740bde">bilibili</a>
</template>

<script>
export default {
  data() {
    return {}
  },
  methods: {
    clickHandle(e) {
      // e.preventDefault()这里也就不需要了,阻止了事件的发生
      console.log("点击了")
    }
  }
}
</script>


<style scoped>

</style>

阻止事件冒泡

复制代码
javascript 复制代码
<template>
 <h3>事件描述符</h3>
  <div @click="clickDiv">
    <p @click.stop="clickP">测试冒泡</p>
  </div>
</template>

<script>
export default {
  data() {
    return {}
  },
  methods: {
    clickDiv(){
      console.log("div")
    },
    clickP(e){
  //在这里也可以写,
  //     e.stopPropagation()
      console.log("p")
    }
  }
}
</script>


<style scoped>

</style>

数组变化侦测

变更方式

Vue能够侦听响应式数组的变更方法,并在他们被调用时触发相关的更新

替换一个数组

不会改变原数组,而是创建一个新数组

下面是上面的两种的代码展示

复制代码
javascript 复制代码
<template>
 <h3>数组变化侦听</h3>
  <button @click="addListHandle">添加数据</button>
  <ul>
    <li v-for="(item, index) of names" :key="index">{{ item}}</li>
  </ul>
  <button @click="concatHandler">合并数组</button>
  <h3>数组1</h3>
  <p v-for="(item, index) of arry1" :key="index">{{item}}</p>
  <h3>数组2</h3>
  <p v-for="(item, index) of arry2" :key="index">{{item}}</p>
</template>
<script>
  export default {
    data(){
      return{
        names: ["arry", "pop", "tom"],
        arry1: [1,2,3,4,5],
        arry2: [7,8,9,10,11,12],
      }
    },
    methods:{
      addListHandle(){
        //this.names.push("waiai")//ui自动引起更新
        this.names.concat(["123"])//ui不会变,
        console.log(this.names.concat(["123"]))
        // 可以变化为
        this.names =  this.names.concat(["123"])//体现了不是原数组了
      },
      concatHandler(){
        this.arry1 = this.arry1.concat(this.arry2)
      }
    }

  }

</script>



<style scoped>

</style>

计算属性

让模版中不要写太多的表达式

计算属性只运行一次,而返回每次都会运行。

复制代码
javascript 复制代码
<template>
 <h3>西游{{xiyou.tast}}</h3>
  <p>{{xiyouContent}}</p>
  <p>{{xiyouContents()}}</p>/
</template>

<script>
 export default{
   data(){
     return{
       xiyou:{
         tast:"qujing",
         names:["arru", "123", "321"]
       }
     }
   },
   //计算属性
   computed:{
     xiyouContent(){
       return this.xiyou.names.length > 0 ? 'yes':"no"
     }
   },
   //放函数或者方法
   methods:{
     xiyouContents(){
       return this.xiyou.names.length > 0 ? 'yes':"no"
     }
   }
 }
</script>


<style scoped>

</style>

Class绑定

操纵元素的CSS class列表,因为class是attribute,那就可以使用v-bind将他们和动态的字符串绑定。在处理比较复杂的是时候,通过拼接生成字符串比较麻烦,因此有了特殊增强功能,除了字符串外,表达式的值可以是对象或者数组。

绑定对象

绑定数组

数组和对象一起使用

提示:数组和对象嵌套过程中,只能是数组嵌套对象。

下面是所有代码的实现:

复制代码
javascript 复制代码
<template>
 <p :class="{'active':isActive, 'text-danger':hasError}">Class样式绑定</p>
  <p :class="classObject">Class样式绑定2</p>
  <p :class="[arrActive, arrHasError]">Class样式绑定3</p>
  <p :class="[isActive? 'active':'']">Class样式绑定4</p>
  <p :class="[isActive? 'active':'',{'text-danger':hasError}]">Class样式绑定5</p>
</template>

<script>
export default {
  data(){
    return {
      isActive:true,
      hasError:true,
      classObject:{
        "active":true,
        "text-danger":true,
      },
      arrActive:"active",
      arrHasError:"text-danger",

    }
  }
}

</script>

<style scoped>
  .active{

  font-size:30px;
  }
  .text-danger{
    color:red;
  }

</style>

Style绑定

这个和class绑定是一样的

复制代码
javascript 复制代码
<template>
  <p :style="{color:activeColor,fontSize:fontSize +'px'}">Style绑定1</p>
  <p :style="styleObject">Style绑定2</p>
</template>

<script>
export default {
  data(){
    return{
      activeColor:"green",
      fontSize:50,
      styleObject:{
        color:"red",
        fontSize:"50px"
      }

    }
  }
}

</script>


<style scoped>

</style>

侦听器

侦听数据的变化,使用watch选项在每次响应式属性发生变化时触发一个函数

javascript 复制代码
<template>
 <h3>侦听器</h3>
  <p>{{message}}</p>
  <button @click="MidMessage">修改数据</button>
</template>

<script>
  export default {
    data(){
      return{
        message:"hello",
      }
    },
    methods:{
      MidMessage(){
        this.message = "123"
      }
    },
    watch:{
      //注意这个名字要和侦听的数据对象是一样的
      message(newValue,oldValue){
        console.log(newValue, oldValue)
      }
    }

  }

</script>

<style scoped>

</style>

表单输入绑定

使用v-model指令简化手动连接值绑定和更改时间监听器

修饰符

提供了修饰符:.lazy,.number,.trim

javascript 复制代码
<template>
<h3> 表单输入绑定</h3>
  <form>
    <input type="text" v-model = "message">
    <input type="text" v-model.lazy="message">
    <p>{{message}}</p>
    <input type="checkbox" id="checkbox" v-model="checked"/>
    <label for="checkbox">{{ checked}}</label>
  </form>
</template>
<script>
 export default {
   data(){
     return{
       message:"",
       checked:false
     }
   }
 }
</script>


<style scoped>

</style>
相关推荐
前端拾光者28 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
Json_181790144801 小时前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
风尚云网1 小时前
风尚云网前端学习:一个简易前端新手友好的HTML5页面布局与样式设计
前端·css·学习·html·html5·风尚云网
木子02041 小时前
前端VUE项目启动方式
前端·javascript·vue.js
GISer_Jing1 小时前
React核心功能详解(一)
前端·react.js·前端框架
捂月1 小时前
Spring Boot 深度解析:快速构建高效、现代化的 Web 应用程序
前端·spring boot·后端
深度混淆1 小时前
实用功能,觊觎(Edge)浏览器的内置截(长)图功能
前端·edge
Smartdaili China1 小时前
如何在 Microsoft Edge 中设置代理: 快速而简单的方法
前端·爬虫·安全·microsoft·edge·社交·动态住宅代理
秦老师Q1 小时前
「Chromeg谷歌浏览器/Edge浏览器」篡改猴Tempermongkey插件的安装与使用
前端·chrome·edge
滴水可藏海1 小时前
Chrome离线安装包下载
前端·chrome