赞
踩
这篇文章你可以只看深入了解–vue实例中的属性搭配指令使用,我觉得这篇博客我写的不太好,唯一的作用可能就是来好好捋一下各个属性以及如何与指令搭配使用。等到下次优化的时候,我会重新换一下目录:
自己想做项目的时候吧,没有页面,只能用postman就很难受,以前虽然学过一点点vue的皮毛,但是还是用不好,所以打算写下这篇博客,一方面可以帮到有需要的人,一方面也可以记录下来,帮助自己!
建议可以先去看一位up主的讲解再来看我的这篇blog,链接放在这里 https://www.bilibili.com/video/BV1er4y1P7UN?p=1&vd_source=06a5ae232746ef6be3fe7b194e82355d 你可以看完这个视频后再来把我这篇当作总结
创建前提:你需要安装nodejs和Vue脚手架
D:\Study\practice
一句话:一个.vue文件就是一个组件
相信大家都知道组件是什么东西吧,看下面这张图:
这个页面就是由四个组件(我觉得可能是)组成的,不同于原生的前端三剑客,Vue不是讲究把所有的代码都写在一个页面上,而是把代码分成几个组件,写完后再一点点去拼在页面上
<template> <h1>hello,world!</h1> </template> <script> export default{ data(){ return { } }, methods:{ }, computed:{ }, watch:{ }, created(){ }, mounted(){ }, components:{ }, filters:{ }, props:[] } </script>
这就是最简单的一个.vue文件
template标签里面可以编写这个组件的html
script标签中的export default{}是一个vue实例,里面存放着这个组件需要的数据、函数等等
data的绝佳使用:
{{}}:解析被双括号所包围的变量,从下面的data中找寻这个键的值
v-bind:此指令用于修饰标签的属性
v-if:此指令用于控制标签是否被创建
v-show:此指令用于控制标签是否展示于页面
v-for:此指令用于在列表中渲染数组
v-model:此指令用于数据在表单中的双向绑定
<template> <!-- 重点开始 --> <div v-if="isLogin"> <h1>hello,{{name}}</h1> <img v-bind:src="photo"/> 这是我们新进的水果:<br/> <ul> <li v-for="(fruit,index) of fruits" :key = "index"> {{fruit}} </li> </ul> </div> <div v-show="!isLogin"> <h1>抱歉,您还未登录,请登录:</h1> <div> 用户:<input v-model="userName"/><br/> 密码:<input v-model="password"/> </div> </div> <!-- 重点结束 --> </template> <script> export default{ //重点开始 data(){ return { name:"南极茄", photo:"https://img2.woyaogexing.com/2020/02/27/bfe02b7d49ce48998a7068f82bc64a1c!400x400.jpeg", isLogin:true, userName:"", password:"", fruits:["苹果","橘子","香蕉"] } }, //重点结束 methods:{ }, computed:{ }, watch:{ }, created(){ }, mounted(){ }, components:{ }, filters:{ }, props:[] } </script>
methods的绝佳使用:
v-on:用于给事件绑定方法
<template> <div v-if="isLogin"> <h1>hello,{{name}}</h1> <img v-bind:src="photo"/> </div> <div v-show="!isLogin"> <h1>抱歉,您还未登录,请登录:</h1> <div> 用户:<input v-model="userName"/><br/> 密码:<input v-model="password"/> </div> </div> <!-- 重点开始 --> <button v-on:click="changeState">点我切换形态!</button> <!-- 重点结束 --> </template> <script> export default{ data(){ return { name:"南极茄", photo:"https://img2.woyaogexing.com/2020/02/27/bfe02b7d49ce48998a7068f82bc64a1c!400x400.jpeg", isLogin:true, userName:"", password:"" } }, //重点开始 methods:{ changeState(){ this.isLogin = !this.isLogin; } }, //重点结束 computed:{ }, watch:{ }, created(){ }, mounted(){ }, components:{ }, filters:{ }, props:[] } </script>
computed的绝佳实现:
computed其实和data的用处都差不多,computed主要是用于计算属性之间的关系,当然你说了,在data中计算不也行吗。你说的也对,但是计算属性放在computed中这是规矩,一种约定,看起来更方便,就比如你看我下面,把data中的name删了,放到computed中了吧,为啥呢,名字是通过计算得出的啊。
<template> <div v-if="isLogin"> <h1>hello,{{name}}</h1> <img v-bind:src="photo"/> </div> <div v-show="!isLogin"> <h1>抱歉,您还未登录,请登录:</h1> <div> 用户:<input v-model="userName"/><br/> 密码:<input v-model="password"/><br/> <!-- 重点开始 --> 请输入你的姓和名来确定你的用户名:<br/> <input v-model="lastName"/><br/> <input v-model="firstName"> <h1>就决定了,你的名字是{{name}}</h1> <!-- 重点结束 --> </div> </div> <button v-on:click="changeState">点我切换形态!</button> </template> <script> export default{ data(){ return { photo:"https://img2.woyaogexing.com/2020/02/27/bfe02b7d49ce48998a7068f82bc64a1c!400x400.jpeg", isLogin:true, userName:"", password:"", lastName:"南极", firstName:"茄", } }, methods:{ changeState(){ this.isLogin = !this.isLogin; } }, //重点开始 computed:{ name(){ return this.lastName+this.firstName; } }, //重点结束 watch:{ }, created(){ }, mounted(){ }, components:{ }, filters:{ }, props:[] } </script>
watch的绝佳实现:
主要用于监听哪个数据是否发生变化(数据包括data和computed中的数据)以及对某些数据可以进行处理
<template> <div v-if="isLogin"> <h1>hello,{{name}}</h1> <img v-bind:src="photo"/> </div> <div v-show="!isLogin"> <h1>抱歉,您还未登录,请登录:</h1> <div> 用户:<input v-model="userName"/><br/> 密码:<input v-model="password"/><br/> 请输入你的姓和名来确定你的用户名:<br/> <input v-model="lastName"/><br/> <input v-model="firstName"> <h1>就决定了,你的名字是{{name}}</h1> </div> </div> <button v-on:click="changeState">点我切换形态!</button> </template> <script> import { createStructuralDirectiveTransform } from '@vue/compiler-core'; export default{ data(){ return { photo:"https://img2.woyaogexing.com/2020/02/27/bfe02b7d49ce48998a7068f82bc64a1c!400x400.jpeg", isLogin:true, userName:"", password:"", lastName:"南极", firstName:"茄", } }, methods:{ changeState(){ this.isLogin = !this.isLogin; } }, computed:{ name(){ return this.lastName+this.firstName; } }, //重点开始 watch:{ name(newVal,oldVal){ alert("由于名字更改,请重新输入密码") console.log("你的新名字是"+newVal); console.log("你的老名字是"+oldVal); this.password = ""; } }, //重点结束 created(){ }, mounted(){ }, components:{ }, filters:{ }, props:[] } </script>
其实这两个函数调用都是特别快,都是在页面打开的一瞬间就调用,只不过created调用的比mounted早一点点
created和mounted的绝佳使用:
<template> <div v-if="isLogin"> <h1>hello,{{name}}</h1> <img v-bind:src="photo"/> </div> <div v-show="!isLogin"> <h1>抱歉,您还未登录,请登录:</h1> <div> 用户:<input v-model="userName"/><br/> 密码:<input v-model="password"/><br/> 请输入你的姓和名来确定你的用户名:<br/> <input v-model="lastName"/><br/> <input v-model="firstName"> <h1>就决定了,你的名字是{{name}}</h1> </div> </div> <button v-on:click="changeState">点我切换形态!</button> </template> <script> import { createStructuralDirectiveTransform } from '@vue/compiler-core'; export default{ data(){ return { photo:"https://img2.woyaogexing.com/2020/02/27/bfe02b7d49ce48998a7068f82bc64a1c!400x400.jpeg", isLogin:true, userName:"", password:"", lastName:"南极", firstName:"茄", } }, methods:{ changeState(){ this.isLogin = !this.isLogin; } }, computed:{ name(){ return this.lastName+this.firstName; } }, watch:{ name(newVal,oldVal){ alert("由于名字更改,请重新输入密码") console.log("你的新名字是"+newVal); console.log("你的老名字是"+oldVal); this.password = ""; } }, created(){ alert("我被创建了"); }, mounted(){ alert("页面渲染完成"); }, components:{ }, filters:{ }, props:[] } </script>
刚才我们说过,App.vue其实就相当于html页面,那我们肯定要在这个文件中引入Hello.vue组件,那我们就在App.vue中可以这么写
<script>
import Hello from "./components/Hello.vue";
export default {
components: {
HelloWorld,
Hello: Hello,
}
}
</script>
这样我们就可以在App.vue的template标签中使用Hello标签了
这个父子传值呢,就会用到props,具体可以去看 https://www.bilibili.com/video/BV1er4y1P7UN?p=4&vd_source=06a5ae232746ef6be3fe7b194e82355d 这个链接下的视频,当然我也总结了一点:
1.父向子传值(App.vue向Son.vue传值)
<!-- 在App.vue中 -->
<Son :msg = "message"></Son>
// 在Son.vue中
export default{
props:["msg"]
}
2.子向父传值(使用事件)
<!-- 在App.vue中 -->
<Son :msg = "message" @myEvent="changeData"></Son>
<!-- changeData(childData){
this.childData = changeData;
} -->
// 在Son.vue中
//这是上面的html:<button @click = "sendData"></button>
//...............开始js代码
export default{
methods:{
changeData(){
this.$emit("myEvent",childData)//执行父级的"myEvent",并传值
}
}
}
3.兄弟传值(1+2混合使用)
这两个可以去看视频,毕竟这两个一看就会用,也不和别的属性一样一大堆用着乱还需要捋一遍,或者等我日后有时间,再来补充相关知识,并且好好优化下这篇博客。
写的乱得很啊我吐了,以后一定会来优化的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。