首页 > 其他分享 >vue基础笔记

vue基础笔记

时间:2022-11-30 23:35:10浏览次数:47  
标签:Vue xxx 基础 绑定 笔记 vue value data 属性

1 Vue简介

Vue 是一个框架,也是一个生态。其功能覆盖了大部分前端开发常见的需求。但 Web 世界是十分多样化的,不同的开发者在 Web 上构建的东西可能在形式和规模上会有很大的不同。考虑到这一点,Vue 的设计非常注重灵活性和“可以被逐步集成”这个特点。根据你的需求场景,你可以用不同的方式使用 Vue:

  • 无需构建步骤,渐进式增强静态的 HTML
  • 在任何页面中作为 Web Components 嵌入
  • 单页应用 (SPA)
  • 全栈 / 服务端渲染 (SSR)
  • Jamstack / 静态站点生成 (SSG)
  • 开发桌面端、移动端、WebGL,甚至是命令行终端中的界面

1-1、Vue的特点

  • 采用组件化模式,提高代码复用性,让代码更好维护
  • 声明式编码,让编码人员无需直接操作DOM,提高开发效率
  • 使用虚拟DOM进行

1-2、模板语法

Vue模板语法有两大类:

  1. 插值语法

    功能:用于解析标签体中的内容

    写法:{{xxx}} ,xxx是代表js表达式或vue中定义的data中的所有属性

    示例:

    <div id = "app">
      <p>{{ foo }}</p>
    </div>
    
    <script>
      new Vue({
        el: '#app',
        data: {
          foo: '123456'
        }
      })
    </script>
    
  2. 指令语法

    功能:用于解析标签(包括:标签属性,标签体内容,绑定事件...)

    举例:v-bind:href="xxx" 或 简写为 :href="xxx",xxx同样要写js表达式,

    ​ 且可以直接读取到data中的所有属性。

    ​ 备注:Vue中有很多的指令,且形式都是:v-????,此处我们只是拿v-bind举个例子。

数据绑定

Vue中有2种数据绑定的方式:

  1. 单向绑定(v-bind):数据只能从data流向页面。
  2. 双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。

备注:

  1. 双向绑定一般都应用在表单类元素上(如:input、select等)
  2. v-model:value 可以简写为 v-model,因为v-model默认收集的就是value值。

Object.defineProperty的使用

Object.defineProperty 这个方法接收三个参数:

  1. 属性所在的对象,即一个对象
  2. 属性的名字,对象中的属性名字,可以是这个对象中没有声明的
  3. 一个描述符对象,描述所传属性名可以进行那些操作
<script>
  let person = {
    name: '张山',
    sex:'男'
	}
	//动态设置person对象中的age属性
  Object.defineProperty(person,'age',{
    
    //value属性是基本属性,用来设置代理对象指定参数的值,这里就是person.age的值
    value:13, 
    
    //enumerable属性是基本属性,用来控制指定属性是否可以被枚举,即是否可以被遍历,默认是false,不可以枚举,。这里指person对象中的age属性是否可以被遍历
    enumerable: true, 
   
    //writable属性是基本属性,默认值为false,指指定属性是否可以被修改。这里指person对象中的age属性是否可以直接修改
    writable: true, 
    
    //configurable属性是基本属性,默认值为false,指指定属性是否可以被删除。这里指person对象中的age属性是否可以被删除
    configurable: true 

    get(){//代表获取指定属性时会调用此方法,这里指在获取person.age的值时,会调用此方法
    	return 13;
  	},

    set(val){//代表设置指定属性时会调用此方法,这里指在设置person.age的值时,会调用此方法

    }

  });

</script>

事件处理

在vue中,使用v-on进行绑定事件,如点击事件,v-on:click=“函数方法名” 或 @click=“”

事件的基本使用:

  1. 使用v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名;
  2. 事件的回调需要配置在methods对象中,最终会在vm上;
  3. methods中配置的函数,不要用箭头函数!否则this就不是vm实例了;
  4. methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象;
  5. @click="demo" 和 @click="demo($event)" 效果一致,但后者可以传参;$event是当前DOM实例

事件修饰符的使用

事件修饰符有以下几种

  • .prevent :阻止默认事件,即阻止原标签事件(常用)
  • .stop :阻止事件冒泡(常用)
  • .once :事件只发生一次(常用)
  • .capture :使用事件的捕获模式
  • .self :只有even.target是当前操作的元素时才触发事件
  • .passive :事件的默认行为立即执行,无需等待事件回调完毕

示例:

<!-- 事件只触发一次(常用) -->
<button @click.once="showInfo">点我提示信息</button>

键盘事件

  1. Vue中常用的按键别名:

​ 回车 => enter

​ 删除 => delete (捕获“删除”和“退格”键)

​ 退出 => esc

​ 空格 => space

​ 换行 => tab (特殊,必须配合keydown去使用)

​ 上 => up

​ 下 => down

​ 左 => left

​ 右 => right

  1. Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)

  2. 系统修饰键(用法特殊):ctrl、alt、shift、meta

​ (1).配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。

​ (2).配合keydown使用:正常触发事件。

  1. .也可以使用keyCode去指定具体的按键(不推荐)

  2. Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名

示例:

<!-- 自定义按键 -->
<input type="text" placeholder="按下回车提示输入" @keydown.anjian="showInfo">

<!-- 使用已有的别名按键 -->
<input type="text" placeholder="按下回车提示输入" @keydown.enter="showInfo">

<script type="text/javascript">
  Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
  Vue.config.keyCodes.anjian = 13 //定义了一个别名按键

  new Vue({
    el:'#root',
    data:{
      name:'123'
    },
    methods: {
      showInfo(e){
        // console.log(e.key,e.keyCode)
        console.log(e.target.value)
      }
    },
  })
</script>

监听器(侦听器)

监听器适用于监听vue中属性变化时,同时还要发生其他一些事情时使用,使用关键字为:watch:{ }

watch的级别与data的级别一致,具体实例如下:

export default {
  data() {
    return {
      message: 'Hello World!'
    }
  },
  
  watch:{
    //监听message属性的值,发生变化则进行调用,此方式为简写形式
    message(newVal,oldVal){
      
    },
    //原方式
    message:{
      deep: true // 开启深度监视
    	immediate:true //是否立即执行,即页面渲染时就会执行,默认false
    	handler(newValue,oldValue){
  			//具体执行的逻辑
			}
  	}
  }
}

计算属性

计算属性可以用于需要多个其他数据组合而成得到的数据可以使用计算属性,并且使用计算属性时,所依赖的数据变化是会重新进行计算。

关键字:computed : {} 级别与data的级别一致

示例:

<script>
export default {
  data() {
    return {
      newTodo: '',
      hideCompleted: false,
      todos: [
        { id: id++, text: 'Learn HTML', done: true },
        { id: id++, text: 'Learn JavaScript', done: true },
        { id: id++, text: 'Learn Vue', done: false }
      ]
    }
  },
	//计算属性
  computed: {
    //计算newTodos的值,简写形式
    newTodos(){
      //return的值会作为newTodos的值,相当于在data中有一个newTodos属性,且当todos中的数据变化时,会重新进行计算
      return hideCompleted ? this.todos : this.todos.filter((t)=> t.done) 
    },
    //原始方式
    newTodos9:{
      //获取newTodos9的值会自动调用此方式
      get(){
        return this.todo
      },
      //设置属性时使用,一般不适用,使用时需要对应修改newTodos9所依赖的属性的值,否者获取到的newTodos9值还是以前的
      set(){
    
  		}
      
    }
  },
  methods: {
    addTodo() {
      this.todos.push({ id: id++, text: this.newTodo, done: false })
      this.newTodo = ''
    },
    removeTodo(todo) {
      this.todos = this.todos.filter((t) => t !== todo)
    }
  }
}
</script>

<template>
  <form @submit.prevent="addTodo">
    <input v-model="newTodo">
    <button>Add Todo</button>
  </form>
  <ul>
    <li v-for="todo in newTodos" :key="todo.id">
      <input type="checkbox" v-model="todo.done">
      <span :class="{ done: todo.done }">{{ todo.text }}</span>
      <button @click="removeTodo(todo)">X</button>
    </li>
  </ul>
  <button @click="hideCompleted = !hideCompleted">
    {{ hideCompleted ? 'Show all' : 'Hide completed' }}
  </button>
</template>

<style>
  .done {
    text-decoration: line-through;
  }
</style>

条件渲染

在页面中很多时候是根据某些值进行判断一些操作或样式进行动态显示或隐藏,vue提供两种方式进行判断:

  • v-if

​ 写法:

​ (1).v-if="表达式"

​ (2).v-else-if="表达式"

​ (3).v-else="表达式"

​ 适用于:切换频率较低的场景。

​ 特点:不展示的DOM元素直接被移除。

​ 注意:v-if可以和:v-else-if、v-else一起使用,但要求结构不能被“打断”。

  • v-show

​ 写法:v-show="表达式"

​ 适用于:切换频率较高的场景。

​ 特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉

备注:使用v-if的时,元素可能无法获取到,而使用v-show一定可以获取到。

绑定样式

绑定样式:

  1. class样式

​ 写法:class="xxx" xxx可以是字符串、对象、数组。

​ 字符串写法适用于:类名不确定,要动态获取。

​ 对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。

​ 数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。

  1. style样式

​ :style="{fontSize: xxx}"其中xxx是动态值。

​ :style="[a,b]"其中a、b是样式对象。

列表渲染

v-for指令:

​ 1.用于展示列表数据

​ 2.语法:v-for="(item, index) in xxx" :key="yyy"

​ 3.可遍历:数组、对象、字符串(用的很少)、指定次数(用的很少)

Vue监视数据的原理:

  1. vue会监视data中所有层次的数据。
  2. 如何监测对象中的数据?

​ 通过setter实现监视,且要在new Vue时就传入要监测的数据。

​ (1).对象中后追加的属性,Vue默认不做响应式处理

​ (2).如需给后添加的属性做响应式,请使用如下API:

​ Vue.set(target,propertyName/index,value) 或

​ vm.$set(target,propertyName/index,value)

  1. 如何监测数组中的数据?

​ 通过包裹数组更新元素的方法实现,本质就是做了两件事:

​ (1).调用原生对应的方法对数组进行更新。

​ (2).重新解析模板,进而更新页面。

  1. 在Vue修改数组中的某个元素一定要用如下方法:

​ 1.使用这些API:push()、pop()、shift()、unshift()、splice()、sort()、reverse()

​ 2.Vue.set() 或 vm.$set()

特别注意:Vue.set() 和 vm.$set() 不能给vm 或 vm的根数据对象 添加属性!!!

收集表单数据

收集表单数据:

​ 若:<input type="text"/>,则v-model收集的是value值,用户输入的就是value值。

​ 若:<input type="radio"/>,则v-model收集的是value值,且要给标签配置value值。

​ 若:<input type="checkbox"/>

​ 1.没有配置input的value属性,那么收集的就是checked(勾选 or 未勾选,是布尔值)

​ 2.配置input的value属性:

​ (1)v-model的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)

​ (2)v-model的初始值是数组,那么收集的的就是value组成的数组

​ 备注:v-model的三个修饰符:

​ lazy:失去焦点再收集数据

​ number:输入字符串转为有效的数字

​ trim:输入首尾空格过滤
示例:

账号:<input type="text" v-model.trim="userInfo.account">
密码:<input type="password" v-model="userInfo.password">
年龄:<input type="number" v-model.number="userInfo.age">

内置指令

v-bind : 单向绑定解析表达式, 可简写为 :xxx

v-model : 双向数据绑定

v-for : 遍历数组/对象/字符串

v-on : 绑定事件监听, 可简写为@

v-if : 条件渲染(动态控制节点是否存存在)

v-else : 条件渲染(动态控制节点是否存存在)

v-show : 条件渲染 (动态控制节点是否展示)

v-text指令:

​ 1.作用:向其所在的节点中渲染文本内容。

​ 2.与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会。

v-html指令:

​ 1.作用:向指定节点中渲染包含html结构的内容。

​ 2.与插值语法的区别:

​ (1).v-html会替换掉节点中所有的内容,{{xx}}则不会。

​ (2).v-html可以识别html结构。

​ 3.严重注意:v-html有安全性问题!!!!

​ (1).在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。

​ (2).一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!

v-cloak指令(没有值)

​ 1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。

​ 2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。
示例:

<h2 v-cloak>{{name}}</h2>//作用:当name有值的时候进行显示

v-once指令:

​ 1.v-once所在节点在初次动态渲染后,就视为静态内容了。

​ 2.以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

示例

<h2 v-once>初始化的n值是:{{n}}</h2>//页面只会在初次加载时渲染一次,n值改变不会再次渲染

v-pre指令:

​ 1.跳过其所在节点的编译过程,即对应的元素标签。

​ 2.可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译。

示例:<h2 v-pre>Vue其实很简单</h2>

vue的生命周期钩子

常用的生命周期钩子:

​ 1.mounted: 发送ajax请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】。

​ 2.beforeDestroy: 清除定时器、解绑自定义事件、取消订阅消息等【收尾工作】。

​ 关于销毁Vue实例

​ 1.销毁后借助Vue开发者工具看不到任何信息。

​ 2.销毁后自定义事件会失效,但原生DOM事件依然有效。

​ 3.一般不会在beforeDestroy操作数据,因为即便操作数据,也不会再触发更新流程了。

vm的整体生命周期:

  1. 将要创建 ===> 调用beforeCreate()函数
  2. 创建完毕 ===> 调用created()函数,一个实例只会调用一次
  3. 将要挂载 ===> 调用beforeMount()函数
  4. 挂载完毕 ===> 调用mounted()函数,【重要的钩子】
  5. 数据将要更新 ===> 调用beforeUpdate()函数
  6. .数据更新完毕 ===> 调用updated()函数
  7. 将要销毁 ===> 调用beforeDestroy()函数 【重要的钩子】
  8. 销毁完毕 ===> 调用destroyed()函数

标签:Vue,xxx,基础,绑定,笔记,vue,value,data,属性
From: https://www.cnblogs.com/qiushuiyu-108/p/16940114.html

相关文章

  • 算法基础-搜索
    搜索框架dfs框架#include<bits/stdc++.h>usingnamespacestd;constintN=100005;structNode{charvalue;intlson,rson;}tree[N];......
  • JUC源码学习笔记6——ReentrantReadWriteLock
    系列文章目录和关于我阅读此文需要有AQS独占和AQS共享的源码功底,推荐阅读:1.JUC源码学习笔记1——AQS独占模式和ReentrantLock2.JUC源码学习笔记2——AQS共享和Semaphore......
  • HTTP与HTML基础知识
    今日内容概要前端与后端的概念超文本传输协议HTTP超文本标记语言HTML今日内容详细前端与后端的概念前端用于展示及获取数据的界面就是前端,前端的终点在于页面设计......
  • vuecli3项目集成到springboot
    路径配置当springboot中设置项目访问路径server.servlet.context-path=/demovue项目中vue.config.js需配置publicPathmodule.exports={transpileDependenc......
  • Perl学习笔记
    1:标量在Perl脚本中如果使用了usestrict.变量必需声明后在使用。my:只在当前作用域生效(当前作用域:{})(用my声明的变量是私有变量。)local:在当前作用域内部,以及它的子程序内生......
  • 关于hutool工具箱进行RSA非对称加密的使用笔记
    首先是导入hutool工具包的maven依赖<!--huTool工具箱--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</arti......
  • 动态规划笔记
    动态规划知识点背包问题动态规划,算法课的时候其实就学过,但是在ACM中的应用远比算法课学的01背包等问题要多。01背包问题有N件物品和一个容量是V的背包。每件物品只......
  • Android Activity和Intent机制学习笔记
    ActivityAndroid中,Activity是所有程序的根本,所有程序的流程都运行在Activity之中,Activity具有自己的生命周期(由系统控制生命周期,程序无法改变,但可以用onSaveInstanceState保......
  • Vue2(笔记05) - Vue核心 - 计算属性
    计算属性需求1:两个文本框,输入内容后再合并显示在元素中;插值语法实现:<divid="root">姓:<inputtype="text"v-model:value="firstName"><br>名:<inputtype="text"v-......
  • HTML基础标签
    目录前端的三剑客web的服务本质HTTP协议HTML语法概括head内的常见标签boby内基本标签常见符号body内布局标签baby内常用标签列表标签表格标签表单标签input前端的三剑客......