首页 > 其他分享 >(一)初始vue

(一)初始vue

时间:2023-04-11 18:33:06浏览次数:25  
标签:vue 对象 元素 绑定 key data 初始 属性

data属性

  • data属性是传入一个函数,并且该函数需要返回一个对象:
    • 在Vue2的时候,也可以传入一个对象
    • 在Vue3的时候,必须传入一个函数,否则报错
  • data中返回的对象会被vue的响应式系统劫持,之后对该对象的修改或者访问都会在劫持中被处理:
    • 所有我们在template或者app通过{{counter}},访问counter,可以从对象中获取到数据;
    • 所以我们修改counter的值时,app中的{{counter}}也会发生改变;

methods属性

  • methods属性是一个对象,通常我们会在这个对象中定义很多的方法:
    • 这些个方法可以绑定到模板中;
    • 该方法中,我们可以使用this关键字来直接访问到data中返回对象的属性;
  • 在methods中要使用data返回对象的数据:
    • 那么这个this是必须有值的,并且应该可以通过this获取到data返回对象中的数据
  • this能不能是window
    • this不能是window,因为window中我们无法获取到data返回对象中的数据;
    • 如果使用箭头函数,这个this就是window了;

mustache双大括号语法(大胡子语法/插值语法)

  • 如果把数据显示到模板中,使用最多的语法是nustache语法(双大括号)的文本插值
    • 并且我们前端提到过,data返回的对象是有添加到vue的响应式系统中;
    • 当data中的数据发生改变时,对应的内容也会发生更新。
    • mustache中不仅仅可以是data中的属性,也可以是一个javascript的表达式
    • {{}}中可以写表达式:三元运算符,函数调用,if语句等;
    • {{}}不可以写入赋值语句,因为赋值语句不是表达式,会报错

指令(了解)

 

  • v-once

 

    • 这个指定元素或者组件只渲染一次
    • 当数据发生变化时,元素或者组件以及其所有的子元素将视为静态内容并且跳过。
    • 该指令用于性能优化;
    • 父级有这个指令,子元素也只会渲染一次

 

  • v-text

 

    • 用于更新元素的textContent

 

  • v-html

 

    • 默认情况下,如果我们展示的内容本身是html的,那么vue并不会对其内容进行特殊解析。
    • 如果我们希望这个内容被vue可以解析出来,那么可以使用-V-html来展示。
  • v-pre

    • v-pre用于跳过元素和它的子元素的编译过程,显示原始的mustache标签。
    • 跳过不需要编译的节点,加快编译的速度
  • v-cloak

    • 这个指令保持在元素上直到关联组件实例结束编译。
    • 和css规则如【v-cloak】{display:none}一起用时,这个指令可以隐藏未编译的mustache标签直到组件实例准备完毕。

v-bind指令(掌握)

  • v-bind的绑定属性

    • 前面的一系列指令,主要是将值插入到模板内容中。
    • 但是,除了内容需要动态来决定外,某些属性我们也希望动态来绑定。
    • 如a的href属性,img的src属性
    • 语法糖(简写): 
  • 绑定class介绍

    • 在开发中,有时候我们的元素class也是动态的;
    • 绑定class有两种方式:对象语法,数组语法
  • 绑定class-对象语法

    • 对象语法::class(v-bind:class的简写)一个对象,以动态地切换class
    • 对象中有key:value,key是样式名字;value是布尔值,也可以是变量,变量值是布尔
    • 动态绑定的class是可以和普通的class并列使用的
  • 绑定style介绍

    • 我们可以利用v-bind:style来绑定一些css内联元素
    • 因为某些样式我们需要根据数据动态来决定;
    • 比如某段文字的颜色,大小等等;
    • css的名字可以用驼峰式或者短横线分隔(要用引号括起来)来命名
    • 绑定style的两种语法:对象,数组
  •  动态绑定属性

    • 在一些情况下,我们的属性名可能也不是固定的
    • 如果属性名不是固定的,我们可以使用   :[属性名]=“值”的格式来定义;
    • 这种绑定方式,我们称之为动态绑定属性;
  •  绑定对象

    • 如果我们希望将一个对象的所有属性,绑定到元素上的所有属性,可以直接使用v-bind绑定一个对象;

v-on指令的基本使用

  • 我们可以使用v-on来监听时间点击;

    • v-on:click可以写成@click,@是它的语法糖写法;
    • 当然,我们也可以绑定其他事件
    • 如果我们希望一个元素绑定多个事件,这个时候可以传入一个对象
    • v-on={key(事件名称:value(绑定函数))}
  • 当使用mothods中定义方法,以供@click调用时,需要注意参数问题:

    • 如果该方法不需要额外参数,那么方法后的()可以不添加。
    • 但是注意:如果方法本身有一个参数(本身是指函数体,不是函数调用),那么会默认将原生事件event参数传递进去。
    • 如果需要同时传入某个参数,同时需要event时,可以通过$event传入事件(调用函数时,传入的实参)

 条件渲染

  •  在某些情况下,我们需要根据当前的条件决定某些元素或组件是否渲染,这个时候我们就需要进行条件判断了。

  • vue提供了下面的指令来进行条件判断:
    • v-if
    • v-else
    • v-else-if
    • v-show
  • v-if,v-else-if,v-else,根据条件来渲染某一块的内容

    • 这些内容只有在条件为true时,才会被渲染出来;
    • 这三个指令与javascript的条件语句if,else,else 类似
  • v-show

    • v-show和v-if的用法看起来是一致的,也是根据一个条件决定是否显示元素或者组件
    • v-show和v-if的区别
      • v-show是不支持template的
      • v-show不可以和v-else一起使用  
    • 本质区别
      • v-show元素无论是否需要显示到浏览器上,它的DOM实际都是存在的,只是通过css的disolay属性来进行切换;
      • v-if当条件为false时,对其应的元素压根不会被渲染到DOM中;
    • 开发中如何让进行选择
      • 如果我们的元素需要显示和隐藏之间频繁的切换,那么使用v-show;
      • 如果不会频繁的发生切换,那么使用v-if;

 template元素

  • 因为v-if是一个指令所以必须将其添加到一个元素上:

    • 但是如果我们希望切换的是多个元素,此时我们就会用div,但是div过多会影响浏览器性能。
    • 当为了添加指令包含子元素,而添加指令元素时,我们可以使用template,template不需要渲染
  • template元素可以当作不可见的包裹元素,并且在v-if上使用,但是最终template不会被渲染出来

    • 有点类似于小程序中的block

 v-for

  • v-for写在哪个元素身上,那个元素就会出现多个。

  • 列表渲染

    • 在真实开发中,我们往往会从服务器拿到一组数据,并且需要对其进行渲染
    • 这个时候需要使用v-for来完成
    • v-for类似于javascript的for循环,可以用于遍历一组数据;
  • v-for基本使用

    • v-for的基本格式是“item in 数组”:
    • 数组通常是来自data或者prop,也可以是其他方式;
    • item是我们给每项元素起的一个别名,这个别名可以自定来定义;
  • 在遍历一个数组的时候,需要拿到数组的索引:

    • 如果我们需要索引,可以使用格式:(item,index)in 数组;
    • 数组元素项item是在前面的,索引项index是在后面的;
  •  v-for支持的类型

    • 一个参数:“value in object”;
    • 两个参数:“(value,key)in object”
    • 三个参数:“(value,key,index)in object”
  •  v-for同时也支持数字的遍历:

    • 每一个item都是一个数字;
    • v-for=10,则结果是1,2,3,4,5,。。。。10;
    • v-f也可以遍历其他可迭代对象(iterable)

v-for中key是什么作用 

  • 在使用v-for进行列表渲染时,我们通常会给元素或者组件绑定一个key属性

  • key要求是“唯一”:id

    •   在vue中,相同父元素的子元素节点并不会重新渲染整个列表
    •   因为对于列表中a,b,c,d都是没有变化的;
    •   在操作真实DOM的时候,我们只需要在中间插入一个元素即可;
    •   Vue事实上会对key和没有key会调用两个不同的方法
    •   有key,那么就使用patchkeyedChildren方法
    •   没有key,那么就会使用patchunkeyedChildren方法;

认识VNode

  • vnode概念

    • Vnode的全称是Virtual Node,也就是虚拟节点;
    • 无论是组件还是元素,它们最终在Vue中表示出来的都是一个个VNode;
    • VNode的本质是一个javascript对象
    • 过程:template -> vnode -> 真实dom

虚拟DOM

  • 如果我们不只是一个简单的div,而且有一大堆的元素,那么它们应该会形成一个VNode Tree

  • 虚拟dom作用:跨平台

数组更新检测

  • vue将被监听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。

  • 这些被包裹过的方法包括:

    • push()
    • pop()
    • shift()
    • unshift()
    • splice()
    • sort()
    • reverse()
  • 不修改原数组的方法不能监听

 computed

  • 在模板中可以直接通过插值语法显示data中的数据,它的值是一个对象。
  • 但是在某些情况,我们可能需要对数据进行一些转换后再显示,或者需要将多个数据结合起来进行显示;
    • 如需要对多个data数据进行运算、三元运算符来决定结果、数据进行某种转化后显示;
    • 在模板中使用表达式,可以非常方便的的实现,但是设计的初衷是用于简单的运算;
    • 在模板中放入太多的逻辑会让模板过重和难以维护;
    • 并且如果多个地方都使用到,那么会有大量重复的代码;
  • 将逻辑抽离出去方法一:
    • 将逻辑抽取到一个method中,放到methods的options中;
    • 弊端:就是所有的data使用过程中都会变成一个方法的调用;
  • 将逻辑抽离出去方法二:
    • 计算机属性computed
  • 认识计算机属性computed
    • 只要data里面的属性经过计算放入模板中的,都需要使用computed属性;
    • computed属性看起来像是一个函数,但是我们在使用的时候不需要加()
    • 计算属性是有缓存的
  • 计算属性和methods的差异
    • computed属性会基于它们的依赖关系进行缓存;
    • 在数据不发生变化时,计算属性是不需要重新计算的;
    • 但是如果依赖的数据发生变化,在使用时,计算属性依然会重新进行计算

认识侦听器watch

  • 什么是侦听器?
    • 开发中我们在data返回的对象中定义了数据,这个数据通过插值语法等方式绑定到template中;
    • 当数据变化时,template会自动进行更新来显示最新的数据;
    • 但是在某些情况下,我们希望在代码逻辑中监听某个数据的变化,这个时候就需要用侦听器watch来完成了;
    • 它的值是一个对象,对象里面的方法,监听data中那个数据,就用哪个key的名字作为方法的对象
  • 默认有两个参数:newValue/oldValue
    • newValue是监听发生改变后的值,
    • oldValue是监听发生改变前的值
  • 如果是对象类型,那么拿到的是代理对象,proxy
  • 如果不想使用使用代理对象,则使用vue.toRow方法拿到原来的对象

vue.toRaw

  • vue的方法,可以将proxy对象变成原来的对象

标签:vue,对象,元素,绑定,key,data,初始,属性
From: https://www.cnblogs.com/ffhyy/p/17297931.html

相关文章

  • #yyds干货盘点 springboot和vue搭建前后端项目实现员工的增删改查
    前言我是歌谣今天继续带来前后端项目的开发上次已经开发了部门管理,今天继续开发员工管理后端第一步empcontroller代码packagecom.itheima.controller;importcom.itheima.pojo.Emp;importcom.itheima.pojo.PageBean;importcom.itheima.pojo.Result;importcom.itheima.s......
  • Vue动态创建组件实例并挂载到body
    方式一importVuefrom'vue'/***@paramComponent组件实例的选项对象*@paramprops组件实例中的prop*/exportfunctioncreate(Component,props){constcomp=new(Vue.extend(Component))({propsData:props}).$mount()document.body.appendChild(......
  • 一个 OpenTiny,Vue2 Vue3 都支持!
    大家好,我是Kagol,OpenTiny 开源社区运营,TinyVue 跨端、跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营。今天给大家介绍如何同时在Vue2和Vue3项目中使用 TinyVue。TinyVue是一套跨端、跨框架的企业级UI组件库,支持Vue2和Vue3,支持PC端和移动端。......
  • vue3使用elmentui-plus中的图标
    按照官网这样直接引入使用,不知道为啥行不通:import{Document,MenuasIconMenu,Location,Setting,}from'@element-plus/icons-vue'使用时,需要<script>import{UserFilled}from'@element-plus/icons-vue'//使用的时候需要单独引入这个图标从......
  • vue项目中webpack编译glsl文件的配置
    1、 安装webpack-glsl-loader npminstallwebpack-glsl-loader2、修改vue.config.js配置,添加内容如下module.exports=defineConfig({configureWebpack:(config)=>{config.module.rules.push({test:/\.glsl$/,use:[......
  • vue3使用体验--用了之后再也不想用vue2
    0.个人推荐使用setup语法糖,看起来更加简洁。<scriptsetup>import{ref,reactive,onMounted}from'vue';constname=ref('李四');   //定义普通数据类型的响应式,获取/修改数据需要.value,在模板中不需要.value,可以直接使用onMounted(()=>{ //某些业务逻辑。 ......
  • Vue3 setup语法糖添加name属性
    1.安装插件vite-plugin-setup-extendnpmivite-plugin-setup-extend-D2.配置vite.config.tsimportvuefrom'@vitejs/plugin-vue'import{defineConfig}from'vite'//引入插件并使用importvueSetupExtendfrom'vite-plugin-vue-setup-extend�......
  • 【学习笔记】JS+VUE
    JSJS教程HTML定义了网页的内容CSS描述了网页的布局JavaScript控制了网页的行为简介1、什么是JS?JavaScript是一种轻量级的编程语言。JavaScript是可插入HTML页面的编程代码。JavaScript插入HTML页面后,可由所有的现代浏览器执行。2、JS有哪些作用?直接写入H......
  • 用quasar+vue3+组合式api 实现小米商城标题栏动画
    先来看一下小米商城标题栏动画:  小米商城标题栏动画主要特点:移入时二级菜单缓慢出现;移出时二级菜单缓慢消失;在一级菜单之间移动时,二级菜单内容直接切换,没有过渡效果。实现思路一、纯css实现(❌)首先肯定是考虑:hover,但是经过试验发现,:hover可以实现鼠标移入移出时的......
  • vue跳到下一页
    好久没接触vue了,,,写毕设的时候,需要从注册页跳到选择兴趣爱好页, 印象里还记得是使用this.$router.push({path:'/'})来跳到下一页,但是一直跳不进去,why,,,去路由配置中心一看,没毛病啊,配置好兴趣爱好页的路由,然后放到注册页的子页面,,傻了,两个页面同时存在。。。果真,什么路由,什么vue,全......