vue--day01
1|0es5和es6的介绍
1|1es6基本语法
- 声明变量
var a = 'xx'; //es5 用var声明不严谨 let s = 'aa'; //es6 严谨 变量不能重复声明:先用let,后用var就会报错 const Pi = 3.141592653; //声明常量,不允许修改;
- 模板语法
let a ='xx'; let name = `$(a)oo`;
- 声明函数
- es5中
function add(x,y){ return x+y } add(1,2); //匿名函数 var add = function(){ return x }
- es6中
//匿名函数 let add = function(){ return x } //箭头函数 let add = (x) =>{ return x } 简写:let add = x => x 简写:let add = (x,y) => x+y
- 自定义对象中封装函数的写法
- es5中自定义对象里面封装函数
var name='小白' var person = { name:'刘伟', 'age':18, f1:function(){ console.log(this); console.log(this.name) } } person.f1(); //刘伟 // es5和es6混合使用 箭头函数 var name = '小白' var person = { name:'刘伟', age:18, f1:()=>{ console.log(this); console.log(this.name); } } person.f1();//小白,找调用者的父级
- es6
//箭头函数 let name = '王振' let person ={ name:'刘伟', age:18, f1:()=>{ console.log(this); //window对象 console.log(this.name); //undefined 因为let不从属于window,所以拿不到值 } } person.f1();
- 函数单体模式
var name = '王振' var person = { name:'刘伟', age:18, f1(){ console.log(this); console.log(this.name); } } person.f1()
-
es5和es6中类写法
//es5 没有类的概念,但是支持写类 function Person(name,age){ this.name = name; //类似于self this.age = age; } 调用 var p1 = new Person('xx',18); //实例化的时候要new一下 取值 p1.name; //es5类中封装方法 原型链 Person.prototype.f2 = function(){ console.log(xxx); } 调用方法 p1.f2(); //es6声明类和封装方法 class Person2{ constructor(name,age){//相当于python中的构造方法 this.name=name; this.age=age; } showName(){console.log(this.name)};//封装方法 }; let p1 = new Person2('bb',18); p1.name p2.showName();
2|0vue简单使用
-
简单示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 在外层标签div中引入id属性值,将来vuejs会通过该id,找到需要操作的元素 --> <div id="app"> <!--在前端页面元素的部分,其中的内容暂时以插值表达式的形式来呈现 --> <h1>{{ name }}</h1> </div> </body> <!-- 引入vuejs框架 --> <script src="vue.js"></script> <script> //当vuejs框架包导入进来之后,在浏览器缓存中,就已经存在了一个vue框架的构造函数 // 我们new出来的这个vm对象,就是页面中对于模型和视图(数据和页面元素)的整体调度者 let vm = new Vue({ el:'#app', //el元素表现的是要指定为哪个标签进行相应的vuejs的操作 data:{ //data是vuejs中对于数据的表达,数据约定俗称都是以json形式呈现 name:'刘伟', //数据驱动视图 } }) </script> </html> -
通过vm对象获取vue的属性
vm.$el; vm.$data; vm.$data.name;
3|0vue指令系统
文本操作
-
以标签属性的方式来写,语法:指令系统="值"
-
v-text 和v-html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <p> {{ aele }} </p> <p v-text="aele"> <!-- 让标签原型化输出文本内容,同上用法一样 --> </p> <p v-html="aele"> <!-- 让标签不转义输出 --> </p> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data:{ aele:'<a href="">百度</a>', } }) </script> </html>
条件渲染
-
v-if 和v-show
-
v-if 控制标签生成或者去除的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <!-- 当num===100时显示name的值,等于80时显示elseif的值,否则显示else的值 --> <h1 v-if="num===100">{{ name }}</h1> <h1 v-else-if="num===80">{{ name }}牛逼</h1> <h1 v-else>{{ meinv }}</h1> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data:{ num:101, name:'刘伟', meinv:'simin', aele:'<a href="">百度</a>', } }) </script> </html> -
v-show 控制标签显示或隐藏
<body> <div id="app"> <!-- 满足不满足条件都会生成标签 不满足时会有display=none的属性 --> <h1 v-show="num>100">{{ name }}</h1> <h1 v-show="num<100">{{ name }}</h1> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data:{ num:101, name:'刘伟', meinv:'simin', aele:'<a href="">百度</a>', } }) </script> -
v-if 和 v-show的区别
区别在于v-if不会生成标签,只会生成满足条件的那个标签。 v-show则是不管你满足不满足条件,都会生成标签,内部有display=None的属性。 频繁切换标签显示与否,尽量使用v-show,不会打乱文档结构 不频繁的可以使用v-if,条件不成立,不会生成标签,渲染就快些
属性绑定
-
v-bind
<body> <div id="app"> <p xx='meinv'></p> <!-- 静态属性 --> <p v-bind:xx="meinv"></p> <!-- 动态属性可以获取到数据属性对应的值 --> <p :xx='meinv'></p> <!-- 简写形式 --> <h1>思敏</h1> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data:{ meinv:'simin', } }) </script>
事件绑定
-
v-on
<body> <div id="app"> <!-- 点击思敏,num自动+1 --> <h1 v-on:click="num++">思敏</h1> <h1 @click="num++">思敏</h1> <!-- 简写形式 --> <p>{{ num }}</p> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data:{ num:100, } }) </script>
vue数据属性的写法
let vm = new Vue({ el:'#app', /* 方式一 data:{ num:100, name:'刘伟', meinv:'simin', aele:'<a href="">百度</a>', } */ //方式二 data(){ //这样写数据属性最常用,后面使用组件时必须这样写 return { num:100, name:'刘伟', meinv:'simin', aele:'<a href="">百度</a>', } } }) </script>
-
示例 数字加减 使用到v-model 双项数据绑定
<body> <div id="app"> <button @click="num++">+</button> {# <input type="text" :value="num">#} <!-- v-model相当于我在输入框输入的值会影响num,同时修改num也会影响输入框中的值 --> <input type="text" v-model="num"> <!-- 双项数据绑定 --> <button @click="num--">-</button> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { num:10, } } }) </script>
vue的methods属性
-
声明方法的属性
<body> <div id="app"> <button @click="num++">+</button> {# <input type="text" :value="num">#} <!-- v-model相当于我在输入框输入的值会影响num,同时修改num也会影响输入框中的值 --> <input type="text" v-model="num"> <!-- 双项数据绑定 --> <button @click="Handler">-</button> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { num:10, } }, methods:{ //放函数 Handler() { //单体模式 if(this.num>0){ this.num--; } } } }) </script>
示例 显示和隐藏wifi密码
<body> <div id="app"> <input :type="type"> <button @click="show">{{ xx }}</button> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { num:10, type:'password', xx:'显示密码', } }, methods:{ //放函数 show(){ if (this.type==='password'){ this.type='text'; this.xx ='隐藏密码'; }else{ this.type='password'; this.xx ='显示密码'; } } } }) </script>
4|0样式操作
-
控制class类值操作 方式一
<body> <div id="app"> <button @click="status=!status">改变样式</button> <!-- <div :class="{c1:status}"></div> 只要status为true,c1就会加到class中 --> <!-- 控制多个类值 --> <div :class="{c1:num===100,c2:status}"> 思敏说OK </div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { value:'c1', status:false, num:100, } }, methods:{ //放函数 } }) </script> -
方式二 用的少
<body> <div id="app"> <button @click="status=!status">改变样式</button> <div :class="[m1,m2]"> 思敏说OK </div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { m1:{ 'c1':true, }, m2:{ 'c2':true } } }, methods:{ //放函数 } }) </script> -
控制style样式
方式一 <body> <div id="app"> <button @click="">改变样式</button> <!-- 里面的样式只能用逗号连接不能用分号 backgroundColor去掉-并且Color大写--> <div :style="{ backgroundColor: bgc,color: xcolor,fontSize: xfont +'px' }"> 思敏说OK </div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { xcolor:'green', bgc:'red', xfont:30, //字体大小只写个数字,px在样式上面拼接 } }, methods:{ //放函数 } }) </script> 方式二 <body> <div id="app"> <button @click="">改变样式</button> <!-- 里面的样式只能用逗号连接不能用分号 backgroundColor去掉-并且Color大写--> {# <div :style="{ backgroundColor: bgc,color: xcolor,fontSize: xfont +'px' }">#} <div :style="ss"> 思敏说OK </div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { ss:{ color:'green', backgroundColor:'red', fontSize:'30px', } } }, methods:{ //放函数 } }) </script> 方式三 显示效果和方式二一样 <body> <div id="app"> <button @click="">改变样式</button> <!-- 里面的样式只能用逗号连接不能用分号 backgroundColor去掉-并且Color大写--> {# <div :style="{ backgroundColor: bgc,color: xcolor,fontSize: xfont +'px' }">#} <div :style="[ss1,ss2]"> 思敏说OK </div> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { ss1:{ color:'green', fontSize:'30px', }, ss2:{ backgroundColor:'red', } } }, methods:{ //放函数 } }) </script> -
选项卡示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #card{ width: 500px; height: 350px; } .title{ height:50px; } .title span{ width: 100px; height: 50px; background-color:#ccc; display: inline-block; line-height: 50px; /* 设置行和当前元素的高度相等,就可以让文本内容上下居中 */ text-align:center; } .content .list{ width: 500px; height: 300px; background-color: yellow; display: none; } .content .active{ display: block; } .title .current{ background-color: yellow; } </style> <script src="vue.js"></script> </head> <body> <div id="card"> <div class="title"> <span :class="{current:num===1}" @click="num=1">国内新闻</span> <span :class="{current:num===2}" @click="num=2">国际新闻</span> <span :class="{current:num===3}" @click="num=3">银河新闻</span> <!--<span>{{num}}</span>--> </div> <div class="content"> <div class="list" :class="{active:num===1}">国内新闻列表</div> <div class="list" :class="{active:num===2}">国际新闻列表</div> <div class="list" :class="{active:num===3}">银河新闻列表</div> </div> </div> <script> // 思路: // 当用户点击标题栏的按钮[span]时,显示对应索引下标的内容块[.list] // 代码实现: var card = new Vue({ el:"#card", data:{ num:0, }, }); </script> </body> </html>
-
v-for循环
<body> <div id="app"> <ul> <!-- value为每个字典,index为索引下标 --> <!-- :key是vue做的一个优化机制 后续你修改数据属性的值的时候, 再生成标签的时候就不会生成新的标签了,会用之前已经生成的标签 提高页面渲染效率,并预防循环生成的标签出现顺序混乱--> <li :key="value.id" v-for="value,index in data_list">{{ value.name }}--{{ index }}</li> </ul> <ol> <!-- value为值,index为键 --> <li v-for="(value,index) in info">{{ value }}--{{ index }}</li> </ol> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { info:{ username:'云超', hobby:'比基尼', }, data_list:[ {id:1,name:'chao',age:18}, {id:2,name:'wei',age:19}, {id:3,name:'bai',age:20}, {id:4,name:'lin',age:21}, ] } }, methods:{ //放函数 } }) </script>
vue对象提供的属性功能
-
过滤器 和django的模板渲染中的过滤器干的事情是一样的
-
全局过滤器
<body> <div id="app"> <h2>{{ info.username|xie }}</h2> </div> </body> <script src="vue.js"></script> <script> //全局过滤器 Vue.filter('xie',function (val) { return val + 'xxoo谢晨' }); let vm = new Vue({ el:'#app', data(){ return { info:{ username:'云超', hobby:'比基尼', }, username2:'刘伟', price:200, } }, methods:{ //放函数 }, }) </script> -
局部过滤器
<body> <div id="app"> <!-- true_man对应的函数就会接收info.username的值 --> <h1>{{ info.username|true_man }}</h1> <h1>{{ username2|true_man }}</h1> <h1>{{ price|yuan }}</h1> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { info:{ username:'云超', hobby:'比基尼', }, username2:'刘伟', price:200, } }, methods:{ //放函数 }, //局部过滤器 写在vue对象属性中 filters:{ //过滤器 true_man:function (val) { return val+'真男人'; }, //单体模式 yuan(val){ return val+'元' } } }) </script>
-
-
计算属性
<body> <div id="app"> <h1>{{ xx }}</h1> <!-- 返回值s1 --> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { info:{ username:'云超', hobby:'比基尼', }, username2:'刘伟', price:200, } }, //计算属性 computed:{ xx:function () { let s1 = this.info.username + 'xxoo' + this.username2 return s1 } } }) </script> -
监听属性 实时监听某些数据从而做出一些反应
<body> <div id="app"> <input type="text" v-model="num"> <h1>{{ num }}</h1> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { info:{ username:'云超', hobby:'比基尼', }, username2:'刘伟', price:200, num:0, } }, //监听属性 watch:{ num:function (val) { console.log(val) } } }) </script>
生命周期钩子函数
<body> <div id="app"> <input type="text" v-model="num"> <h1>{{ num }}</h1> <button @click="info.username='xxx'">走你</button> <h1>{{ info.username }}</h1> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { info:{ username:'云超', hobby:'比基尼', }, username2:'刘伟', price:200, num:0, } }, //在数据属性加载和圈地之前做的事情 beforeCreate:function () { console.log(this.$el); //undefined console.log(this.$data); //undefined }, //vue对象在加载数据属性之后,执行 常用 created:function () { console.log(this.$el); //undefined console.log(this.$data); //数据属性拿到了 //这里就可以发送请求,在加载页面时获取后台的数据来展示 //$.ajax({ // ... // res.data //}) }, //数据属性已经有值了,将数据挂载到视图中之前触发 beforeMount:function () { console.log(this.$el); //拿到视图,但是相关属性还没有塞进去加载<h1>{{ num }}</h1> console.log(this.$data);//数据属性拿到了 }, //数据挂载到对应视图之后,触发 mounted:function () { console.log(this.$el); //拿到视图,并且相关属性已经加载进去了 console.log(this.$data); //数据属性拿到了 }, //了解 //某个视图发生变化之前触发,之后触发,异步实现,所以出现顺序不一样可能 beforeUpdate:function () { console.log(this.$el); //拿到是变化之后的el console.log(this.$el.innerHTML); //里面的内容是之前内容<h1>云超</h1> console.log(this.$data); }, //变化后触发 updated:function () { console.log(this.$el.innerHTML); //里面的内容是变化后的内容<h1>xxx</h1> console.log(this.$data); } }) </script>
阻止事件冒泡和刷新页面
<body> <div id="app"> <div class="c1" @click="fatherHandler"> <!-- 阻止事件冒泡 @click.stop 和 @click.stop.prevent用法一样--> {# <div class="c2" @click.stop="sonHandler"></div>#} <div class="c2" @click.stop.prevent="sonHandler"></div> </div> <form action=""> <input type="text"> <!-- 阻止页面刷新提交数据 --> <input type="submit" @click.stop.prevent=""> </form> <a href="" @click.stop.prevent="">xx</a> </div> </body> <script src="vue.js"></script> <script> let vm = new Vue({ el:'#app', data(){ return { info:{ username:'云超', hobby:'比基尼', }, username2:'刘伟', price:200, num:0, } }, methods:{ fatherHandler(){ alert('父标签') }, sonHandler(){ alert('子标签') } } }) </script>
综合示例 要做的事情
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>todolist</title> <style type="text/css"> .list_con{ width:600px; margin:50px auto 0; } .inputtxt{ width:550px; height:30px; border:1px solid #ccc; padding:0px; text-indent:10px; } .inputbtn{ width:40px; height:32px; padding:0px; border:1px solid #ccc; } .list{ margin:0; padding:0; list-style:none; margin-top:20px; } .list li{ height:40px; line-height:40px; border-bottom:1px solid #ccc; } .list li span{ float:left; } .list li a{ float:right; text-decoration:none; margin:0 10px; } </style> </head> <body> <div class="list_con"> <h2>To do list</h2> <input type="text" name="" id="txt1" class="inputtxt"> <input type="button" name="" value="增加" id="btn1" class="inputbtn"> <ul id="list" class="list"> <!-- javascript:; # 阻止a标签跳转 --> <li> <span>学习html</span> <a href="javascript:;" class="up"> ↑ </a> <a href="javascript:;" class="down"> ↓ </a> <a href="javascript:;" class="del">删除</a> </li> <li><span>学习css</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li> <li><span>学习javascript</span><a href="javascript:;" class="up"> ↑ </a><a href="javascript:;" class="down"> ↓ </a><a href="javascript:;" class="del">删除</a></li> </ul> </div> </body> </html>
__EOF__

本文作者:404 Not Found
本文链接:https://www.cnblogs.com/weiweivip666/p/13569086.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
本文链接:https://www.cnblogs.com/weiweivip666/p/13569086.html
关于博主:可能又在睡觉
版权声明:转载请注明出处
声援博主:如果看到我睡觉请喊我去学习
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人