Vue初学日记Day1

1.配置环境

参考:https://www.jianshu.com/p/454c3a7c5602

node-v10.16.0-x64.msi

链接:https://pan.baidu.com/s/1DX1kCrf3IsYUiVjSKDZKAA  提取码:gzcn

VSCodeUserSetup-x64-1.35.1.exe

链接:https://pan.baidu.com/s/1j41SgHP5fTLE1eC0jvSQKw  提取码:x9fu

Chrome Browser

2.Vue基本代码结构

按MVVM模式划分

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><script src="../lib/vue-2.4.0.js"></script>
</head>
<body><!-- V --><div id="app"><p>{{msg}}</p>  </div><!-- V --><script>// VMvar vm = new Vue({      el:'#app',//Mdata:{          msg:"1111"}//M})    // VM</script>
</body>
</html>

3.v-cloak,v-text,v-html

插值表达式,作用于V模块

v-cloak 防止内容闪烁,提前在<style>中设置[v-cloak]的display属性为none,未加载完时不显示

v-text 字符串文本替换,替换后直接显示

v-html html文本替换,替换后按html代码去执行

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Day1_2_v-cloak&text&html</title><style>[v-cloak]{display: none;}</style>
</head>
<body><div id="app"><p v-cloak>{{msg}}</p><!-- v-cloak 防止闪烁 --><h4 v-text="msg">正在加载</h4><!-- v-text 字符串文本替换 --><div v-html="msg2">正在</div><!-- v-html html文本替换--></div><script src="../lib/vue-2.4.0.js"></script><script>var vm = new Vue({el:'#app',data:{msg:"123",msg2:"<h1> 1234 <h1/>"}})    </script>
</body>
</html>

4.v-bind属性绑定,v-on事件绑定

v-bind缩写为冒号:

V模块中元素,将其属性绑定到M模块中data中的元素,用data中元素来表示其属性

<body><div id="app"><input type="button" value="Btn" v-bind:title="mytitle + ' ss'"><input type="button" value="Btn2" :title="mytitle + '123'"><!-- v-bind属性绑定机制,可简写为冒号: 提供用于绑定属性的指令,后面识别为表达式 --><!-- Button插入 --></div><script>var vm = new Vue({el:"#app",data:{msg:"123",mytitle:"this is a button."}})</script>
</body>

v-on缩写@

V模块中元素,将其触发的事件绑定到VM中methods中的元素,用methods中元素表示其触发事件

v-on支持80多个事件

<body><div id="app"><input type="button" value="按钮" :title="mytitle + '!!!'" id="btn1"><p></p><input type="button" value="按钮2" v-on:click="myevent"><input type="button" value="按钮3" @mouseover="myevent"><!-- v-on事件绑定机制,此处为事件click/mouseover,在已定义的方法中去查找 --><!-- v-on: 可用 @ 替换--></div><script>var vm = new Vue({el:"#app",  //操作区域iddata:{      //定义数据msg:"123",mytitle:"这是一个按钮"},methods:{   //定义方法myevent:function(){alert("Hello")}}})document.getElementById("btn1").onclick = function(){alert("Hello World")}</script></body>

5.跑马灯效果制作

需要用到计时器:setInterval( function(), time)  //每隔time毫秒,执行一次function()

清除计时器:clearInterval(interval_Id)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Day1_5_HorseRaceLamp</title><script src="../lib/vue-2.4.0.js"></script>
</head>
<body><div id="app"><p>{{msg}}</p><input type="button" value="Begin" :title="bgtitle" @click="bgfc"><input type="button" value="Stop" :title="stptitle" @click="stpfc"></div><script>// 在VM中要获取data中的数据或methods中的方法,要用this.数据、this.方法来访问// 此处this表示vmvar vm = new Vue({el:"#app",data:{msg:"  This is a function of horse race lamp.  ",bgtitle:"Press this button, the function will begin.",stptitle:"Press this button, it will stop.",intervalId:null //定义定时器id},methods:{bgfc:function(){//console.log(this.msg)//var _this=this;if (this.intervalId!=null) return;this.intervalId = setInterval(()=>{// 用intervalId记录每次新建的定时器的id//setInterval(function(),time) 定时器var start = this.msg.substring(0,1)var end = this.msg.substring(1)this.msg= end + start}, 400)},stpfc(){clearInterval(this.intervalId)  //给定id,清除定时器this.intervalId=null}}})</script>
</body>
</html>

6.v-on事件修饰符

V模块,元素为包含关系,触发事件时,无事件修饰符时先执行触发的元素所绑定的事件,再依次执行其上一层(包含它的元素)所绑定的事件。

.stop  //先执行其绑定的事件,将这种依次触发的传递终止。

.prevent  //阻止元素自身功能(按钮功能,链接功能),不阻止绑定的事件触发,也不阻止传递

.capture  //外层元素设置capture后产生个监听器,内层元素触发后,先执行监听器,即先执行外层所绑定事件

.self  //只有元素自身触发时才执行其绑定事件,不影响其内层和外层元素的触发传递

.once  //只执行一次元素所绑定的事件,可和其它修饰符连用,使其它修饰符的功能也只执行一次

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Day1_6_v-on事件修饰符</title><script src="../lib/vue-2.4.0.js"></script><style>.inner1{height: 150px;background-color: darkblue;}.inner2{height: 100px;background-color:darkcyan;}.inner3{height: 50px;background-color:darkgoldenrod;}</style>
</head>
<body><div id="app"><div class="inner1" @click="divcli"><input type="button" value="按钮" @click.stop="btncli"></div><a href="https://www.baidu.com" @click.prevent="htmlcli">访问百度</a><div class="inner2" @click.capture="divcli"><input type="button" value="按钮"  @click="btncli"></div><div class="inner3" @click.self="divcli"><input type="button" value="按钮"  @click="btncli"></div><a href="https://www.baidu.com" @click.prevent.once="htmlcli">百度</a></div><script>var vm = new Vue({el:"#app",data:{},methods:{btncli(){console.log("Button is clicked")},divcli(){console.log("Div is clicked");},htmlcli(){console.log("Html is clicked");}}})</script>
</body>
</html>
<!-- .stop -->
<!-- .prevent -->
<!-- .capture -->
<!-- .self -->
<!-- .once -->

7.v-model及简易计算器

v-model是vue中唯一实现数据双向绑定的插值表达式,只可用于表单元素

<body><div id="app"><input type="text" v-model="a"><select v-model="opt"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option></select><input type="text" v-model="b"><input type="button" value="=" @click="cal"><input type="text" :value="c"></div><script>var vm = new Vue({el: "#app",data: {a: null,b: null,c: null,opt: '+',secret:"This is a secret"},methods: {cal() {switch (this.opt) {case "+":this.c=parseFloat(this.a)+parseFloat(this.b);break;case "-":this.c=parseFloat(this.a)-parseFloat(this.b);break;case "*":this.c=parseFloat(this.a)*parseFloat(this.b);break;case "/":if (this.b==0) this.c="Divisor can't be 0."else this.c=parseFloat(this.a)/parseFloat(this.b);break;}}}})</script>
</body>

eval(str)  //可将字符串str中内容当做代码执行

因此可以用以下代码实现上代码的功能:

cal() {var str="parseFloat(this.a)"+this.opt+"parseFloat(this.b)"this.c=eval(str)}

当eval可能被恶意利用,应尽量少用

8.eval的风险Bug

以简易计算器代码为例,稍作修改

eval则有可能被恶意利用

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Day1_8_evalBug</title><script src="../lib/vue-2.4.0.js"></script>
</head>
<body><div id="app"><input type="text" v-model="a"><select v-model="opt"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option></select><input type="text" v-model="b"><input type="button" value="=" @click="cal"><input type="text" :value="result"></div><script>var vm = new Vue({el: "#app",data: {a: null,b: null,result: null,opt: '+',secret: "This is the secret."},methods: {cal() {var str = "this.result=" + this.a + this.opt + this.beval(str)}}})</script>
</body>
</html>

当输入 this.b=this.secret 时,则可读取代码中secret的内容

9.属性绑定class类样式和style行内样式

1).class类样式

在style中提前设定好样式

<style>.red{color: red}.thin{font-weight: 200}.italic{font-style: italic}.space{letter-spacing: 1em}</style>

在data中设定所需变量及class的对象

data:{spac:true,clr:true,classObj6:{'red':true,'thin':false,'italic':false,'space':true}},

在V中以class类来给内容添加样式

<div id="app"><h1 class="red thin italic">This is a sentence.</h1><!-- 直接引用style中的样式 --><h2 :class="['thin','italic']">This is sentence 2.</h2><!-- 引用一个class数组,数组中包含style中的样式,要用v-bind绑定 --><h3 :class="['thin','italic',spac?'space':'']">This is sentence 3.</h3><!-- class数组中的样式可以添加三元运算符 --><h4 :class="['thin','italic',{'red':clr}]">This is sentence 4.</h4><!-- class数组中用{}将样式元素扩起时,可用一个bool变量标注样式否使用 --><h5 :class="{'red':true,'thin':false,'italic':false,'space':true}">This is sentence 5.</h5><!-- 用{}可扩起多个样式 --><h6 :class="classObj6">This is sentence 6.</h6><!-- 可将样式数组或{}放在data中,用一个样式对象表示,可直接用v-bind调用 --></div>

2).style行内样式

不提前在style中设定好样式,直接在使用样式的具体内容(字体、颜色等的格式)

可先在data中,设定好对象专门记录格式

data:{styleObj1:{'color':'blue','font-size':'30px'},styleObj2:{'font-weight':'20'}},

在V中直接设定style的具体格式

<div id="app"><h1 :style="{'font-size':'20px','color':'red'}">This is sentence 1.</h1><!-- {}可以包含多个格式,但要用v-bind绑定 --><h2 :style="styleObj1">This is sentence 2.</h2><!-- 设定style格式对象 --><h3 :style="[styleObj1,styleObj2]">This is sentence 3.</h3><!-- 设定style 格式对象的数组 --></div>

10.v-for

循环普通数组

<body><div id="app"><div v-for="item in list">{{item}}</div><!-- A in B 格式,B为data中数组对象,A依次循环B中的元素 --><div v-for="(item,i) in list">No.{{i}} is {{item}}</div><!-- (A,C) in B 格式,B为data中数组对象,A依次循环B中的元素,C为A的索引序号 --></div><script>var vm =new Vue({el:"#app",data:{list:[1,2,3,4,5,6]}})</script>
</body>

循环对象数组

v-text缩写{{ }},可以用于引用data中的数据

<body><div id="app"><p v-for="user in list">{{user.id}}--{{user.name}}</p><!-- 同样 A in B 形式 --></div><script>var vm =new Vue({el:"#app",data:{list:[{id:1, name:'n1'},{id:2, name:'n2'},{id:3, name:'n3'},{id:4, name:'n4'},]}})</script>
</body>

循环对象(其自身键值对)

<body><div id="app"><!-- 在遍历对象身上的键值对时 v-for="(val,key,索引) in B" 依次为内容 键值名 索引序号 --><p v-for="(val, key, i) in user">{{val}}---{{key}}---{{i}}</p></div><script>var vm =new Vue({el:"#app",data:{user:{id:1,name:'Tony',gender:'male'}}})</script>
</body>

迭代数字

<div id="app"><p v-for="i in 10">this is No.{{i}}.</p><!-- A in B 形式, B为循环范围,A为每次循环迭代的值 --></div>

循环中键值key的使用

<label>标签

<label for="某元素的id"></label> 当点击label的内容时,光标会自动跳到它所指向id的元素

<body><div id="app"><div><label for="idtxt">Id:<input type="text" v-model="id" id="idtxt"></label><label for="nametxt">Name:<input type="text" v-model="name" id="nametxt"></label><input type="button" value="添加" @click="add"></div><!-- :key将每个循环的内容绑定唯一的key值,必须用v-bind绑定,key只能使用number或string --><!-- 在组件中使用v-for循环时,若出现问题,必须在使用v-for时指定唯一的字符串/数字 类型的 :key值,
用key值将单次循环的所有内容绑定,使得每次循环的内容能互相区分
这里若无:key="item.id , checkbox就不会对应item,
添加新元素时,checkbox的状态不会跟随对应item --><p v-for="item in list" :key="item.id"><input type="checkbox">{{item.name}}</p></div><script>var vm= new Vue({el:"#app",data:{id:null,name:null,list:[{id:1,name:'n1'},{id:2,name:'n2'},{id:3,name:'n3'},{id:4,name:'n4'},{id:5,name:'n5'}]},methods:{add(){//this.list.push({id: this.id, name: this.name})// push塞入数组尾部this.list.unshift({id: this.id, name:this.name})// unshift塞入数组头部,塞入对象为{},{}内输入对象的键值}}})</script>
</body>

11.v-if和v-show

v-if=true/false、v-show=true/false用来表示V模块中元素是否显示,

<body><div id="app"><input type="button" value="button" @click="flag=!flag"><!-- v-if 每次都会重新删除或创建元素 --><!-- v-show 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式 --><!-- v-if 较高切换性能消耗 --><!-- v-show 较高初始性能消耗 --><!-- 若频繁切换用v-show,若可能永远也不会被显示出来用v-if --><h1 v-if="flag">This is v-if</h1><h1 v-show="flag">This is v-show</h1></div><script>var vm = new Vue({el:"#app",data:{flag:true}})</script>
</body>

以上是初学Vue第一天所学的内容

学习参考:

https://www.bilibili.com/video/av50680998/?p=21

Vue初学日记Day1相关推荐

  1. Vue初学日记Day2

    Vue初学日记Day2 1.代码链接 https://github.com/dglhtao/VueLearning 2.品牌管理案例 实现品牌的添加.删除.搜索 代码: <!DOCTYPE ht ...

  2. 云音乐vue开发日记

    云音乐vue开发日记 前言 2020-11-21 1.vue中sass的配置 2.页面布局 3.引组件 2020-11-22 1.el-menu的使用 2.css经验 3.element-ui修改默认 ...

  3. Python学习日记-day1基础篇 字符 输出 注释

    Python学习日记-day1基础篇 字符 输出 注释 by北栀一刺 # -*- coding: utf-8 -*- """ Spyder EditorThis is a ...

  4. vue——初学Vue

    vue--初学Vue 1.事件处理 1.1事件修饰符 prevent:阻止默认事件 stop:阻止事件冒泡 once:事件只触发一次 capture:使用事件的捕获模式 self:只有event.ta ...

  5. 尚学堂Java学习日记Day1

    尚学堂学习日记Day1 #今天开始写学习博客记录自己学习java的点滴成长历程,希望能成为学弟学妹们的前车之鉴. 先大概的自我介绍下,我原本从事的是网络工程师,学习的是Cisco(思科)并拥有CCNP ...

  6. Vue错误日记 ——关于Vue-Router出现esm-bundler.js?6c02:2127 Uncaught TypeError: Object(...) is no的解决方案

    Vue错误日记 --关于Vue-Router无法正常使用的解决方案 前言 配置 项目环境 项目代码 问题处理 结束语 前言 今天用 Vue-cli 搭建 Vue 项目时,发现Router无法正常挂载, ...

  7. antd vue form 手动校验_参与《开课吧》vue训练营笔记(Day1)

    大神说的目标:Vue 挑战20k+ 组件间通信 component 官网 详解 组件间的传递方式: 父传子 直接属性传递 子传父 this.$emit 时间传递兄弟组件 利用父组件搭桥 组件和子孙 p ...

  8. go html vue,[终极巨坑]golang+vue开发日记【三】,登陆界面制作(二)

    写在前面 本期内容是承接上期已经做好了登陆界面来写的,不过本期是以golang为主,可能需要大家把最基本的语法结构熟悉一下:菜鸟教程.这样的话方便展开,自然而然的,本篇也是直接实战为主.这次需要依赖m ...

  9. vue学习笔记 DAY1 P1~P6

    1.vue的特点 1.采用组件化模式(封装到.vue中) 2.声明式编码 3.使用虚拟dom diff算法 2.安装vue中遇到的问题 1.vuedevtools不执行 解决:在扩展程序中打开无痕模式 ...

最新文章

  1. liunx防火墙常用命令
  2. 2020年第一个候选Java增强提案已出现
  3. leetcode-283-移动零
  4. python中_str_使用方法
  5. 2021山东科技大学计算机学院,2021年3月山东科技大学计算机等级考试报名工作通知...
  6. 416亿元公有云市场:阿里173亿、腾讯50亿、华为35亿
  7. 《强化学习》中的第13章:策略梯度方法
  8. 4.2-软件开发中,“思维导图”的作用与绘制方法介绍
  9. PR视频转场预设 10个快节奏极限运动空间扭曲效果PR转场过渡预设
  10. mysql封机器码,lol机器码解除(同理支持市面上任意一款游戏)解机器码
  11. sar图像matlab,用Matlab制作SAR仿真图像
  12. h2o java,R H2O与32位java
  13. Java游戏服务器系列:传统的BIO(OIO)、NIO与Netty中的BIO(OIO)、NIO
  14. Adobe After Effects CC 2020 中英文语言切换方法
  15. 考研政治题库,考研政治1000题之每日一题
  16. java中transient关键字使用学习
  17. msbuild 语法_如何通过命令行 msbuild 编译项目
  18. android手机浏览器怎么查看网页源代码
  19. 怎样调用通达信l2行情接口?
  20. shtml与html的区别

热门文章

  1. 股票交易的眼和心的一些看法
  2. 小学生四则运算练习的编程 软件工程
  3. 通信和通讯的概念与区别
  4. HTML中的table表格重叠的边框去除以及合并方法
  5. 音频编解码·实战篇(1)PCM转至AAC(AAC编码)
  6. mysql数据库实验查询_数据库表的查询操作(实验二)
  7. Excel导出且合并相同值的单元格
  8. Worthington胶原蛋白酶原料
  9. 国产兼容三菱FX3U源码,最新一波bug修改,修改监控时卡顿 问题
  10. ExtJS4.2初识