Vue
1、javascript复习以及ES6介绍
javascript : 是个编程语言,是个非编译性语言 是个解释性语言 是一个脚本语言 对数据类型不敏感
组成:
ECMAScript: javaScript规范
dom : document Object Model 文档对象模型: 把整个页面抽象成一个document对象
bom : broswer Object Model 浏览器对象模型 把浏览的功能键 抽象成一个window
ECMAScript是核心
ES6 ECMAScript的第6个版本 2015年就出来(2019年左右被大量处理)
ES6的新语法学习: 阮一峰写了一本书 ES6 对应的有一个帖子 ES6的学习内容
2、node.js
node.js不是编程语言 就是js代码运行的运行环境
安装步骤:
1: 下载
2: 安装(双击) 下一步 下一步 (选择安装目录(不要有中文 不要有空格))
3: 在cmd中 使用node -v 查看是否安装成功
4: node + js文件运行js
3、ES6 的使用
3.1、let和const的使用
以前变量定义的方式 使用关键字var 因为js是一个弱类型语言 所以var可以接受任何类型
var 变量名 = 值(任何类型)
在ES6中提供了一个修饰符来修饰变量
let :以接受任何类型
1 、可以修改变量 但是let修饰的变量 在同一个作用域下 只能被定义一次 多次定义将会报错
2、 let修饰的变量 有块级作用域
const: 修饰的变量是常量 有点类似于java中的final
注意点: const修饰的变量 变量中存的值不能发生改变 哪怕修改成原来的值都不可以
const修饰的变量 定义的时候 必须给值 不给值将会报错
// 此时变量中存储的是地址 这个地址并没有发生概念 而概念的是地址指定的位置的数据发送改变了 const huige = { name:"huige", age:20 } // ooo=100; //隐式全局变量 huige.age=100 console.log(huige); //setTimeOut是一个异步操作 就算延迟0秒(不延时) 后面的代码也先执行 // setTimeout(function () { // console.log("aaa"); // }, 0) // { // let i = 0; // setTimeout(function () { // console.log(i); // }, 0) // } // // { // let i =1; // setTimeout(function () { // console.log(i); // }, 0) // // } // // { // let i =2 ; // // setTimeout(function () { // console.log(i); // }, 0) // } // // { // let i =3; // setTimeout(function () { // console.log(i); // }, 0) // } // // for (let i = 0; i < 10; i++) { // setTimeout(function () { // console.log(i); // }, 0) // } // let a = 10; // let b = "str"; // let c = true; // // console.log(a); // console.log(b); // console.log(c); // //////////////////////////////// // // var huige = 1; // var hugie =2; // var huige = 3; // console.log(huige); // let zs = 10; // let zs = 20; // let zs = 10; // if(1){ // let zs = 20; // console.log(zs); // } // // console.log(zs);
3.2、对象的定义
对象:是一组无序的键值对
包含:
属性 : value值不是一个函数的
行为: value是函数的就是行为1: 当对象的属性和变量的变量名一致的时候 此时可以简写
2: 行为:如果这个函数时一个匿名函数 此时可以简写
3: 行为: 如果这个函数时一个命名函数 并且函数名和属性名一致 此时可以简写let obj = { name: "huige", say:function(){} }
let name = "huige" function say(){ console.log("我爱说"); } let obj = { name, say } obj.say() console.log(obj); // let obj = { // name:"huige", // say:function (){ // console.log("huige "); // } // // } // // console.log(obj); // // obj.say()
3.3、解构赋值
解构取值语法 修饰符 {对象的属性名: 变量名} = 对象
// let a = 10; // let b = 20; // let c = 30; // // let array = [10, 20, 30]; // let [a, b, c] = array; //从数组中取值 // // let [,,e] =array //没用 // console.log(a); // console.log(b); // console.log(c); // // console.log(e); //解构取值语法 修饰符 {对象的属性名: 变量名} = 对象 let obj = { name: "huige", age: 20, address: "郑州" } // let str = obj.name;//==let {name: str} = obj; // let {name: name, age: age, address: address} = obj; let {name, age, address} = obj; //大量使用 console.log(name); console.log(age); console.log(address);
3.4、箭头函数
ES6 提供了箭头函数 和 lambda表达式差不过
语法: (参数列表)=>{函数体}
3.4.1、定义没有参数 没有返回值的函数
//定义没有参数 没有返回值的函数 // let huige = ()=>{console.log("我是辉哥")}; let huige = () => console.log("我是辉哥"); huige();
3.4.2、有参数 没有返回值
//有参数 没有返回值 // 有1个参数 如果只有一个参数 ()可以省略 ,如果设置默认值时 需要加小括号 // let huige1 = (x)=>console.log(x); // let huige1 = (x=1) =>console.log(x); // huige1(30); // huige1() // 有多个参数 小括号不能省略 // let hugie2 = (x=0,y=0)=>console.log(x+y); // hugie2(10)
3.4.3、没参数 但是有返回值
如果{}号中只有一行代码 此时花括号和return 必须同时存在 或者同时不存在
//没参数 但是有返回值 如果{}号中只有一行代码 此时花括号和return 必须同时存在 或者同时不存在 let huige3 = () => 20; var number = huige3(); console.log(number);
3.4.4、有参数 有返回值
//有参数 有返回值 let huige4 = (a, b, c, d) => a + b + c + d; console.log(huige4(10, 20, 30, 40));
3.4.5、箭头函数与普通命名函数的区分
箭头函数 中没有 arguments来封装实参 当传递多个参数时需要一个可变参数作为形参
普通命名函数 有arguments来封装实参 当传递多个参数时时不需要形参
/** * 箭头函数 中没有 arguments来封装实参 此时需要一个可变参数作为参数 * * 普通命名函数 有什么区分 有arguments来封装实参 此时不需要参数 * * * nan 不是一个数字 是不是 不是一个数组 如果是 表示不是一个数字 如果false 表示是一个数字 */ // function sum() { // } // let sum = (...num)=>{ // let sum = 0; // for (let i = 0; i < num.length; i++) { // var argument = num[i]; // var number1 = parseFloat(argument); // if (!isNaN(number1)) { // sum += number1; // } // } // return sum; // } // sum(); // console.log(sum(1,2,4));; // sum(1,2,true); // console.log(sum(1, 2, "str", "gg", "99766",true,"true")); /* console.log(isNaN(true)); console.log(+true); */ // console.log(parseFloat("99999")); let obj = { name: "huige", say() { var that = this; setTimeout(function () { console.log(kiujkgjjifgbuug.name); }, 1000) setTimeout(()=>console.log(this.name),1000) } } obj.say(); /* * this: 表示的是当前对象 * * 谁调用这个函数 这个函数中的this就指谁 * * * * */ // setTimeout(function (){ // console.log(this); // }.bind(this),1000) console.log(this);
3.5、字符串拼接
使用``拼接字符串,``里不用写转义字符
4、Vue的大概介绍
Vue读音=(view) 是前端的一个渐进式框架
总结: vue是一个框架 是一个MVVM框架,内部提供了虚拟DOM 让我们无任何的DOM操作,由于是MVVM的框架 所以可以动态感知数据的变化 进而自动的修改视图,可以动态感知视图的变量 进而动态的修改数据 并且Vue提供了组件 、指令 、插槽、 路由等功能方便我们开发工程, 并且Vue默认对单页面应用程序SPA程序支持良好和ES6中的模块化 导入导出功能无缝整合。
MVVM :
M: 数据
V: view 视图
VM: 监听器
详见图片

Vue开发时注意点
1: 兼容性问题
兼容ie8以上2: 版本问题:
长期稳定版 2.6.143: vue开发工具(插件) 很重要
4: 生产包和开发包的区别
生产包 无法调试 (发布的时候 使用生产包 )
开发包 可以调试(开始需要调试 所以开发时需要使用开发包
4.1、vue的简单感受
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <!-- {{}} 插值表达式 里面的取值 就是对应data中的对象的属性名 把属性值展示到这个位置--> <span>{{message}}</span> </div> <span>{{message}}</span> <!--引入vue.js mvvm M: 数据模型: data中的对象 就是数据模型 V: id= app的标签表示视图 el属性指定的选择器对应的标签 就是视图 VM: vue对象 --> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { message:"辉哥" } }) </script> </body> </html>
5、vue的使用
5.1、vue的插入值表达式
插值表达式:
语法 {{}} 作用的地方 是标签体 里面的取值是 data中定义的属性
功能:
1: 取值
2: 字符串拼接
3: 三目运算符
4: 调用函数
5: 数值运算
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 插值表达式: 语法 {{}} 作用的地方 是标签体 里面的取值是 data中定义的属性 功能: 1: 取值 2: 字符串拼接 3: 三目运算符 4: 调用函数 5: 数值运算 --> <div id="app"> <!-- 1: 取值 --> <div>{{message}}</div> <!-- 2: 字符串拼接 --> <div>{{"我是:" + message}}</div> <!-- 3 数值运算 --> <div>{{age + 2}}</div> <!-- 4 三目运算符 --> <div>{{age > 18 ? "已成年" : "青少年"}}</div> <!-- 可以调用函数 --> <div>{{"辉哥真球帅".substr(1, 3)}}</div> <div>{{message.substr(0, 1)}}</div> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { message: "辉哥", age: 20, num: "990AAA" } }) </script> </body> </html>
5.2、v-text&&v-html
v-text的功能和 插值表达式一模一样
取值:data中的属性名
不一样的地方:
插值表达式 写在标签体中 取的值展示在标签体中 (单标签无法使用)v-text 写在标签的属性位置 取的值展示在标签体 (单标签无法使用)
v-text 对html字符串不识别
v-html 和 v-text使用一模一样 只是识别html字符串
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- v-text的功能和 插值表达式一模一样 取值:data中的属性名 不一样的地方: 插值表达式 写在标签体中 取的值展示在标签体中 (单标签无法使用) v-text 写在标签的属性位置 取的值展示在标签体 (单标签无法使用) v-text 对html字符串不识别 v-html 和 v-text使用一模一样 只是识别html字符串 --> <div id="app"> <!-- 1: 取值 --> <div v-text="message"></div> <!-- 2: 字符串拼接 --> <div v-text="'我是:' + message"></div> <!-- 3 数值运算 --> <div v-text="age+2"></div> <!-- 4 三目运算符 --> <div v-text="age > 18 ? '已成年' : '青少年'"></div> <!-- 可以调用函数 --> <div v-text="'辉哥真球帅'.substr(1, 3)"></div> <div v-text="message.substr(0, 1)"></div> <div v-text="htmlStr"></div> <div>{{htmlStr}}</div> <hr> <!-- 1: 取值 --> <div v-html="message"></div> <!-- 2: 字符串拼接 --> <div v-html="'我是:' + message"></div> <!-- 3 数值运算 --> <div v-html="age+2"></div> <!-- 4 三目运算符 --> <div v-html="age > 18 ? '已成年' : '青少年'"></div> <!-- 可以调用函数 --> <div v-html="'辉哥真球帅'.substr(1, 3)"></div> <div v-html="message.substr(0, 1)"></div> <div v-html="htmlStr"></div> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { message: "辉哥", age: 20, num: "990AAA", htmlStr:"<h1>我是标题</h1>" } }) </script> </body> </html>
5.3、v-bind
v-bind
前提: 插值表达式 v-html v-text 作用的地方都是标题体v-bind作用的地方是标签的属性
1: 语法:v-bind:属性名="data中的属性名"
:属性名= "data中的属性名"2: class属性的对象语法
{class的类名: boolean值} 表示 满足条件的时候 class类将会生效 不满足的时候不生效3: 在字符串拼接中使用这种语法
4: 不要掌握
v-bind:[data中的属性名]
:[data中的属性名]
<img :[xxxx]="imgUrl" alt="">
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- v-bind 前提: 插值表达式 v-html v-text 作用的地方都是标题体 v-bind作用的地方是标签的属性 1: 语法: v-bind:属性名="data中的属性名" :属性名= "data中的属性名" 2: class属性的对象语法 {class的类名: boolean值} 表示 满足条件的时候 class类将会生效 不满足的时候不生效 3: 在字符串拼接中使用这种语法 4: 不要掌握 v-bind:[data中的属性名] :[data中的属性名] <img :[xxxx]="imgUrl" alt=""> --> <style> .huige { color: red; font-size: 18px; } /* */ </style> <div id="app"> <!-- <img src="./mvvm.png" alt="" v-bind:title="mytitle" :width="myWidth" v-bind:height="myHeight">--> <!-- <p :class="{huige: age>18}">我是一朵花 为你而绽放</p>--> <!-- <a v-bind:href="`/huige/xxx/id=${age}`">点我一下 你就知道</a>--> <img :[xxxx]="imgUrl" alt=""> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { myWidth: 100, myHeight: 100, mytitle: "我是谁", age: 18, imgUrl: "./mvvm.png", xxxx: "src" } }) </script> </body> </html>
5.4、v-for
遍历:
对象的遍历(了解)
v-for="(value,key) in obj" :key="key"
v-for="(value,key,index) in obj" :key="key"
数组的遍历
语法:
v-for= "item in list" 其中list是data中定义的数组
语法二:
v-for="(item,index) in list" 可以获取到索引
扯淡的语法
<li v-for="n in 20">{{n}}</li>
v-for = "item in list" 其中的in 可以换成of
优化点:
真正开发时用到的语法 添加:key="唯一值(index 可以是Item中的id属性值)" 是为了view复用 提高性能
v-for = "(item,index) in list" :key="index"
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 遍历: 对象的遍历(了解) v-for="(value,key) in obj" :key="key" v-for="(value,key,index) in obj" :key="key" 数组的遍历 语法: v-for= "item in list" 其中list是data中定义的数组 语法二: v-for="(item,index) in list" 可以获取到索引 扯淡的语法 <li v-for="n in 20">{{n}}</li> v-for = "item in list" 其中的in 可以换成of 优化点: 真正开发时用到的语法 添加:key="唯一值(index 可以是Item中的id属性值)" 是为了view复用 提高性能 v-for = "(item,index) in list" :key="index" --> <div id="app"> <ul> <!-- <li v-for="item of array" >{{item}}</li>--> <!-- <li v-for="(item,index) of array">索引为:{{index}} 索引的值是{{item}} 辉哥是{{huige}}</li>--> <li v-for="(a,b,index) in obj" :key="b" >a={{a}} b={{b}} index={{index}}</li> </ul> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { array: ["aaa", "bbb", "cccc", "dddd"], obj: { name: "张珊", age: 20, address: "二七区" } } }) </script> </body> </html>
5.5、v-model
v-model 用于双向数据绑定
作用标签 一般都是表单标签 input select textarea
动态绑定属性 它是单项的 数据发生概念 视图发生概念 视图发生改变 数据不变
v-mode=""
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- v-model 用于双向数据绑定 作用标签 一般都是表单标签 input select textarea 动态绑定属性 它是单项的 数据发生概念 视图发生概念 视图发生改变 数据不变 v-mode="" --> <div id="app"> <!-- <input type="text" v-model="msg">--> <!-- <input type="text" v-model="msg">--> <textarea cols="10" rows="10" v-model="msg"></textarea> <select v-model="msg"> <option value="xxxxx">xxxx</option> </select> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { msg:"飞啊飞" } }) </script> </body> </html>
5.6、v-on
v-on 表示给标签设置事件
语法:
v-on:事件名称="事件处理函数" 事件处理函数 要写在vue中
语法二:
@事件名="事件处理函数" 事件处理函数 要写在vue中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- v-on 表示给标签设置事件 语法: v-on:事件名称="事件处理函数" 事件处理函数 要写在vue中 语法二: @事件名="事件处理函数" 事件处理函数 要写在vue中 --> <div id="app"> <div>{{myText}}</div> <button v-on:click="clickMe">点我</button> <button @click="myText='ni hen hao'">点我</button> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { msg: "飞啊飞", myText:"我是文本" }, //这个属性中专门写函数的 methods: { clickMe(){ this.myText="w shi huige" } } }) </script> </body> </html>
5.7、v-if&&v-show
v-if
v-if="boolean" 这个值可以来自于vue
v-show
v-show="boolean" 这个值可以来自于vue
都是控制标签是否展示
v-if 控制的方式 直接把标签干掉
v-show控制的方式 使用css中的隐藏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- v-if v-if="boolean" 这个值可以来自于vue v-show v-show="boolean" 这个值可以来自于vue 都是控制标签是否展示 v-if 控制的方式 直接把标签干掉 v-show控制的方式 使用css中的隐藏 --> <div id="app"> <img src="./mvvm.png" width="150px" height="150px" alt="" v-show="isShow"> <button @click="isShow=true">点我展示</button> <button @click="isShow=false">点我隐藏</button> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { isShow: false }, //这个属性中专门写函数的 methods: { // sureShow(){ // this.isShow=true // }, // sureNoShow(){ // this.isShow=false // } // } }) </script> </body> </html>
5.8、$nextTick()
监听器vm会监听到数据的变化 此时异步刷新页面
这个this.$nextTick 里面定义的函数 是在页面更新完成之后执行的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- --> <div id="app"> <div ref="mydiv">{{huige}}</div> <button v-on:click="changeData">点我改变数据</button> </div> <script src="./vue.js"></script> <script> let vue = new Vue({ // el: 全称 element 表示元素的意思: 取值选择器 找到一个或者多个元素 // 找到的元素 以及 这个元素的子元素 都会被vue管理 el: "#app", //表示数据 取值是一个对象 data中对象中的属性可以随便写 // 这些数据就是页面中要展示的数据 data: { huige:"我是辉哥" }, //这个属性中专门写函数的 methods: { changeData(){ this.huige="你丫的 不错 " //监听器vm会监听到数据的变化 此时异步刷新页面 //这个this.$nextTick 里面定义的函数 是在页面更新完成之后执行的 this.$nextTick(()=>console.log(this.$refs.mydiv.innerText)) } } }) </script> </body> </html>

浙公网安备 33010602011771号