当前位置: 首页 > news >正文

Vue基础(一) 基础用法

1.取消生产提示

Vue.config.productionTip = false;
Vue.config.devtools = true; //运行开发调试

2.hello小案例

需要注意如下几点:

1.必须要有一个模板,其实就是一个html组件

2.新建一个Vue实例,并且通过el与容器建立绑定关系,容器里面就是css的选择器写法。

3.模板里面可以通{{}}插值表达式来获取容器中的对象,里面可以写js的表达式,并且data里面的内容发生改变后,容器数据也会变化。

<div id="root"><h1>{{name}}</h1></div><script>Vue.config.productionTip = false;Vue.config.devtools = true;new Vue({el: '#root', //和一个容器建立绑定关系data: {name:'尚硅谷'}})</script>

3.数据绑定

3.1 插值语法

作用:单向绑定,并且只能放在标签值中

 <!-- 方式一:插值语法 --><div id="root"><h1>hello,{{name}}</h1></div><script>new Vue({el: '#root',data:{name:'张三'}})</script>

3.2 v-bind

作用:单向绑定,可以绑定值也可以绑定内容比如v-bind:style="name"可以简写为:style="name"

 <div id="root"><!-- <input type="text" v-bind:value="name"> --><input type="text" :value="name"></div><script>new Vue({el: '#root',data:{name:'张三'}})</script>

3.3 v-model

作用:双向绑定,只可以绑定可以输入内容的value属性,比如v-model:value="name"可以简写为:v-model="name"

<div id="root"><input type="text" v-model:value="name"></div><script>new Vue({el:"#root",data:{name:"张三"}})</script>

4.模板和Vue实例的绑定

4.1 通过el方式绑定

  <div id="root"><input type="text" v-model="name"></div><script>Vue.config.devtools = true;new Vue({el: '#root',data: {name: "张三"}}) </script>

4.2 通过$mount的方式绑定

    <div id="root"><input type="text" v-model="name"></div><script>Vue.config.devtools = true;let vm = new Vue({el: '#root',data: {name: "张三"}}) vm.$mount('root')</script>

7.计算属性

7.1 计算属性的基本使用

定义:计算属性本来不存在,需要根据其他属性计算得出。

优势:计算属性相比于methods方法可以走缓存。

用法:第一次渲染或者计算属性所依赖的值发生改变的时候,会进行计算得到新值,调用get方法。

7.2 计算属性的基本使用

    new Vue({el: "#root",data: {firstName: "",lastName: ""},computed: {fullName: {get() {return this.firstName + "-" + this.lastName;},set(value) {//修改逻辑}}}})

7.3 计算属性的简写

new Vue({el: "#root",data: {firstName: "",lastName: ""},computed: {fullName() {return this.firstName + "-" + this.lastName;}}})

8.监视属性

8.1 监视属性基本用法

1.注意点

1.监视属性表示当属性发生变化的时候会触发回调方法。

2.监视的属性必须存在,才能被监视

2.基本写法
  new Vue({el: "#root",data: {weather: "真好",isHot: true},watch: {isHot: {handler(newval, oldval) {console.log(newval, oldval)this.weather = "真冷"}}}})

或者新建完vm后绑定

let vm = new Vue({el: "#root",data: {weather: "真好",isHot: true}// watch: {//     isHot: {//         handler(newval, oldval) {//             console.log(newval, oldval)//             this.weather = "真冷"//         }//     }// }})vm.$watch('isHot',{immediate: true,handler(newval, oldval) {console.log(newval, oldval)}})

8.2 深度监视

 let vm = new Vue({el: "#root",data: {weather: "真好",isHot: true,number: {a: 1,b: 2}},watch: {number: {deep: true, //如果是个多级对象,需要用deep来表示监听对象里面的内容handler(newval, oldval) {console.log(newval, oldval)}}}})

8.3 监视属性简写

 let vm = new Vue({el: "#root",data: {weather: "真好",isHot: true,number: {a: 1,b: 2}},watch: {isHot(newval, oldval) {console.log(newval, oldval)}}})

8.4 监视属性和计算属性的区别

计算属性能干的监视属性都能做,但是监视属性能够实现某些功能(比如某个值发生改变,产生的影响定时触发)

9.vue中函数的写法

1.如果是vue实例管理的函数,写普通函数,vue保证这些函数的this是vue实例或者VueComponent实例。

2.如果是其他函数,比如ajax回调函数,promise回调函数,定时器回调函数写箭头函数。

10.vue中的动态样式

<div id="root"><div :class="classObj"></div><div :style="styleObj"></div></div><script>let vm = new Vue({el: "#root",data: {className:'red', //适用于样式名称不确定classArr:['pink1','pink2','pink3'], //适用于样式名称和个数不确定classObj:{  //适用于名称个数确定,但是用不用不确定'red':true,"blue":false},styleObj:{fontSize:10+'px'}}})

11.条件渲染

<div id="root"><div v-show="a === 1">1</div>  //表示a为1的时候才会展示<div v-if="a === 1">1</div> //如果第一个判断满足,后面的逻辑便不会走<div v-else-if="a === 2">2</div><div v-else>3</div></div><script>let vm = new Vue({el: "#root",data: {a: 1}})

注意:v-show是隐藏掉元素,但是v-if是元素不存在。

12.for循环

12.1 基本使用

其中user表示元素,index表示索引,从0开始

<div id="root"><ul><li v-for="(user,index) in users" :key="user.id">{{user.name}}</li></ul></div><script>new Vue({el: "#root",data: {users: [{ id: 1, name: "张三", age: 12 },{ id: 2, name: "李四", age: 33 },{ id: 3, name: "王五", age: 24 },]}})</script>

12.2 key的作用

Vue渲染的步骤如下:

1.如果数据发生变化,Vue会根据数据生成新的虚拟Dom,并且将key作为该Dom的唯一标识。

2.根据Dom进行相同Key的比较,入股以前的Dom存在,便会用以前的Dom进行渲染,如果未找到,便会创建新的虚拟Dom。

所以在选择Key的时候,尽量选择唯一id作为key。

12.3 列表的作用

1.关键词搜索
<div id="root"><input type="text" v-model="keyword"><button>升序</button><button>降序</button><button>原来顺序</button><ul><li v-for="(user,index) in filPerson" :key="user.id">{{user.name}}</li></ul></div><script>new Vue({el: "#root",data: {keyword: "",users: [{ id: 1, name: "张三", age: 12 },{ id: 2, name: "李四", age: 33 },{ id: 3, name: "王五", age: 24 },{ id: 4, name: "张冬梅", age: 2 }]},computed: {filPerson() {return this.users.filter(user => { return user.name.indexOf(this.keyword) !== -1 })}}})
2.排序
  <div id="root"><input type="text" v-model="keyword"><button @click="sortType = 'asc'">升序</button> <button @click="sortType = 'desc'"> 降序</button><button @click="sortType=''">原来顺序</button><ul><li v-for=" (user,index) in filPerson" :key="user.id">{{user.name}}--{{user.age}}</li></ul></div><script>new Vue({el: "#root",data: {keyword: "",sortType: "",users: [{ id: 1, name: "张三", age: 12 },{ id: 2, name: "李四", age: 33 },{ id: 3, name: "王五", age: 24 },{ id: 4, name: "张冬梅", age: 2 }]},computed: {filPerson() {console.log("sortType=", this.sortType)const arr = this.users.filter(user => { return user.name.indexOf(this.keyword) !== -1 })if (this.sortType === "asc") {arr.sort((p1, p2) => {return p1.age - p2.age})} else {arr.sort((p1, p2) => {return p2.age - p1.age})}return arr}}})

13. Vue是如何监视数据的

13.1 Vue是如何监视数据的

数据劫持,也就是会给实例中的每个属性生成set和get方法,当值发生改变的时候,会调用setter方法,重新解析模板。

如果是必须是在Vue实例创建时的属性才能被劫持,后面添加的属性不会被监视,必须要用Vue.set才能添加属性。

 <script>let vm = new Vue({el: "#root",data: {user: {name: "张三"}},methods: {addAge() {Vue.set(this.user, "age", 12)}}})</script>

注意:上面不能给Vue实例和Vue中的data添加属性。

13.2 Vue如何检测数组

可以使用push,pop,shift,unshift,reverse等方法可以被监听。

14.如何收集表单中的数据

<div id="root"><!-- 提交表单的时候一定会触发提交时间,可以给提交事件绑定方法 --><form @submit.prevent="submit"><!-- 如果可以有文本输入便,直接v-model会自动绑定里面的value属性 -->账号: <input type="text" name="username" v-model="user.userName"> <br>密码:<input type="password" name="pwd" v-model="user.password"> <br><!-- v-model.number可以将收集到的数据直接转换成number类型 -->年龄:<input type="number" name="age" v-model.number="user.age"> <br><!-- 如果是单选 没有value值,可以给他设置一个value值,再用v-model进行绑定 -->性别: 男<input type="radio" name="sex" v-model="user.sex" value="male">女<input type="radio" name="sex" v-model="user.sex" value="female"> <br><!-- 如果是多选,也需要一个value值,来表示每个选项的内容,并且v-model进行绑定,并且接收内容需要是一个数组 -->爱好: 吃饭<input type="checkbox" v-model="user.hobby" value="eat">睡觉<input type="checkbox" v-model="user.hobby" value="sleep">打豆豆<input type="checkbox" v-model="user.hobby" value="dadoudou"><br>所属校区: <select v-model="user.area"><option value="北京">北京</option><option value="上海">上海</option><option value="重庆">重庆</option></select><br><!-- 加上lazy表示失去焦点才收集数据 -->其他信息:<textarea v-model.lazy="user.other"></textarea> <br>我接受协议<input type="checkbox" name="" id=""><button>提交</button></form></div><script>let vm = new Vue({el: "#root",data: {user: {userName: "",password: "",age: "",sex: "",hobby: [],area: "",other: ""}},methods:{submit() {window.alert("提交数据")}}})</script>

15.过滤器

15.1 局部过滤器

只能在该组件内使用

<body><div id="root"><h4>{{this.name | spliceStr}}</h4></div><script>new Vue({el:"#root",data:{name:"1234567890"},filters:{spliceStr(value) {console.log(value)return value.slice(0,5)}}})</script></body>

15.2 全局过滤器

能够在所有的vue组件里面使用

    <script>Vue.filter('spliceStr',function(value){console.log(value)return value.slice(0,5)})new Vue({el:"#root",data:{name:"1234567890"},// filters:{//     spliceStr(value) {//         console.log(value)//         return value.slice(0,5)//     }// }})</script>

16. Vue的内置指令

16.1 v-text

v-text=“text”其实就是将text当成一个文本,放到dom节点中间。类似于以前的innerText

16.2 v-html

v-html="html"其实就是将html当做html一个dom节点,放到当前dom节点中间,类似于以前的innerHtml,但是该方法存在xss漏洞。

16.3 v-once

v-once绑定的属性,表示第一次需要动态解析过后,后面值便固定写死

16.4 v-cloak

如果vue加载js资源特别慢,会直接将html渲染上去,然后解析vue中的js代码,然后再将vue中的插值语法给替换掉,会有让用户看到vue中的代码。可以给标签加上v-cloak,加上后,在解析完成vue过后,会删掉该标签。可以结合css代码使用。

[v-cloak] {display:false
}

16.5 v-pre

v-pre标签加上过后,会跳过编译,如果没有vue标签或者插值语法,可以加上该标签,提高编译速度。

17. vue自定义命令

17.1 自定义命令的基本用法

可以在directives里面写自定义方法,比如big方法,然后可以利用v-big来作为指令绑定元素。

注意:

1.big方法会接受两个参数,分别是element,表示的是v-big绑定的dom标签,binding表示的是v-big后面表达式的内容。

2.采用函数写法,只会在指令与标签绑定时,以及指令所在模板重新解析时会调用该方法。

<body><div id="root"><h2>当前我的值为{{n}}</h2>放大10倍后的值为:<h3 v-big="n"></h3> <br><button @click="n++">点我加1</button></div><script>let vm = new Vue({el:'#root',data() {return {n:1}},directives:{big(elment,binding) {console.log(elment,binding.value)elment.innerText=10 * binding.value}}})</script>

17.2 自定义命令的完整写法

 let vm = new Vue({el:'#root',data() {return {n:1}},directives:{big(elment,binding) {console.log(elment,binding.value)elment.value=10 * binding.value//并且自动获取焦点elment.focus()}}})

比如上面的代码,按理说应该在执行big方法的时候,获取焦点,但是因为这种写法只会在命令与模板绑定,更新模板的时候会执行big函数,此时元素还未插入模板,所以并不会执行自动获获取焦点。

 <script>let vm = new Vue({el: '#root',data() {return {n: 1}},directives: {big: {bind(elment, binding) {console.log(elment, binding.value)elment.value = 10 * binding.value//并且自动获取焦点elment.focus()},inserted(elment, binding) {console.log(elment, binding.value)elment.value = 10 * binding.value//并且自动获取焦点elment.focus()},update(elment, binding) {console.log(elment, binding.value)elment.value = 10 * binding.value//并且自动获取焦点elment.focus()}}}})</script>

注意:

1.这里bind表示指令与标签绑定时执行该方法

2.inserted表示插入模板时执行该方法

3.update表示更新模板时执行该方法


 

相关文章:

  • uniapp 小程序 安卓苹果 短视频解决方案
  • 云数据中心整体规划方案PPT(113页)
  • 怎样学习Electron
  • Reverse-WP记录9
  • rust 全栈应用框架dioxus
  • LeetCode58_最后一个单词的长度
  • 创龙全志T536全国产(4核A55 ARM+RISC-V+NPU 17路UART)工业开发板硬件说明书
  • 电子电器框架 --- 数据连接性和云集成在增强电气/电子架构方面的作用
  • 技术白皮书:Oracle GoldenGate 优势
  • Flip PDF Plus Corp7.7.22电子书制作软件
  • 【MCP Node.js SDK 全栈进阶指南】高级篇(5):MCP之微服务架构
  • c/c++之信号处理<signal.h>
  • MATLAB小试牛刀系列(2)
  • 通义千问qwen3发布
  • Linux Vim 使用 显示行号、替换、查找、多文件打开等骚操作
  • 探索PyTorch中的空间与通道双重注意力机制:实现concise的scSE模块
  • github使用记录
  • Centos 7系统 宝塔部署Tomcat项目(保姆级教程)
  • Nginx反向代理的负载均衡配置
  • Maven中的依赖管理
  • 胸外科专家查出肺多发结节,说了一个可怕的事实……
  • 辽宁辽阳市白塔区一饭店火灾事故举行新闻发布会,现场为遇难者默哀
  • 铁路上海站今日预计发送旅客65.8万人次,同比增长超16%
  • 量子传感新技术“攻克”退相干难题
  • 五一假期如何躺赚利息?来看国债逆回购操作攻略
  • “杭州六小龙”的招聘迷局