1 ECMAScript6
1.1 es6的认识
- ECMAScript是浏览器脚本语言的规范,可以狭义理解是javascript的规范
- ES6就是现在最新的JS语法
- 后期更多使用年号来做版本(ES2017,ES2018,…)
1.2 es6常用语法
1.2.1 let&const
- let:用来声明变量。它的用法类似于var(但是声明的变量只在 let 命令所在的代码块内有效。)
- 代码块有效
- 不能重复声明
- 没有变量提升
/*
var的测试结果,在循环外部可以获取,但是let是无法获取的
大家可以注意,let更加符合我们java对于一个变量的定义
*/
for (var i = 0; i < 5; i++) {
console.debug(i);
}
console.debug("外部i:"+i); //外部i:5
for (let j = 0; j < 5; j++) {
console.debug(j)
}
console.debug("外部j:"+j); //ReferenceError: j is not defined
const:声明常量不能修改
const val = "abc";
val = "bcd"; //invalid assignment to const `val'
1.2.2 解构表达式
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
解构变量赋值
//以前变量赋值
let a = "张三";
let b = "李四";
let c = "王五";
console.debug(a,b,c);
//使用解构变量赋值
let [a,b,c] = ["张三","李四","王五"]
console.debug(a,b,c);
数组解构
let arr = ["皮皮虾","皮皮怪","皮皮虫"];
let [a,b,c] = arr;
console.debug(a,b,c);
对象解构
let person = {name:"皮皮虾",age:18};
//把person对象中的值根据名称直接赋值给name与age两个属性
let {name,age} = person;
console.debug(name,age);
1.2.3 箭头函数
相当于咱们Java中的lambda表达式
<script>
/*function say() {
console.log("皮皮虾说:")
}
say();*/
/**
* ():方法的参数
* {}:方法体 (如果方法体只有一句代码 大括号可以省略)
* */
/*let say =(mag)=> console.log("皮皮怪说:" + mag);
say("你打不过我的!");*/
//定义一个常量
const person = {name:"皮皮虾" , age:18};
//准备相应的方法
/*function say(p) {
console.log("名称:" +p.name )
}
say(person)*/
/* let say = ({name,age}) => {
console.log("名称:" +name )
};
say(person)*/
let user = {
name:"xxx",
hello:()=> {
console.log("皮皮坏")
},
hello2(){
console.log("是真的坏")
}
};
user.hello();
user.hello2();
</script>
1.2.4 Promise
- 异步编程的解决方案(比传统的解决方案更加强大)
- Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件
- 我们可以在Promise中封装一个异步请求的结果
注:
以后咱们会使用axios(更加的简单啦),它是对Promise的底层的封装,大家可以先简单理解为就是咱们原生Ajax与JQuery封装后的区别
<script>
/**
* resolve:成功后执行的函数
* reject:失败后执行的函数
*/
var promise = new Promise(function (resolve, reject) {
setTimeout(function () {
let num = Math.random();
if (num>0.5){
//执行成功
resolve("你怕是个皮皮虾...");
}else {
//执行失败
reject("才不是...");
}
},2000)
});
//这里就是执行相应的功能
promise.then(function (msg) {
console.log(msg)
}).catch(function (msg) {
console.log(msg)
})
</script>
1.2.5 模块化规范
- 模块化就是把代码拆分,可以重复利用
- 模块化是一种思想,前端有很多规范可以实现这种思想
- commonJs:nodeJS中的实现方案
- amd/cmd:可以在浏览器中直接实现
- ES6:可以在浏览器中直接实现
- ES6咱们使用两个命令构成:export和import
- export命令用于规定模块的对外接口
- import命令用于导入其他模块提供的功能
1.2.5.1 导出功能
导出代码
//定义一个变量(对象)
const util ={
add(a,b){
return a+b;
}
}
//导出这个变量(对象)
export util;
导出代码简写形式
//直接导出相应的变量
export const util ={
add(a,b){
return a+b;
}
}
可以导出任何东西(基本类型,函数,数组,对象)
var name = "小张";
var age = 34;
export {name,age}
可以省略名称
export default {
add(a,b){
return a+b;
}
}
1.2.5.2 导入功能
导入代码
//导入util(注:如果导入的是default关键字导出,这个util的名称随便取)
import util from 'hello.js'
//调用util中的方法
util.sum(3,4)
批量导入
//批量导入前面导出的name和age
import {name,age} from 'user.js'
console.debug(name,age);
2 Vue入门
2.1 什么是vue
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架
- Vue渐进式的理解:http://www.bslxx.com/a/vue/2017/1205/1490.html
- Vue只关注视图层。
- Vue通过新的属性(自定义)和{{表达式}}扩展了 HTML。
- Vue的目标是通过尽可能简单的 API - - - 实现响应的数据绑定和组合的视图组件。
- Vue学习起来非常简单。
Vue的特点
轻量
Vue.js库的体积非常小的,并且不依赖其他基础库。
数据绑定
对于一些富交互、状态机类似的前端UI界面,数据绑定非常简单、方便。
指令
内置指令统一为(v—*),也可以自定义指令,通过对应表达值的变化就可以修改对应的DOM。
插件化
Vue.js核心不包含Router、AJAX、表单验证等功能,但是可以非常方便地根据需要加载对应插件。
组件化
组件可以扩展 HTML 元素,封装可重用的代码。允许我们使用小型、自包含和通常可复用的组件构建大型应用
2.2 el,data与method
2.2.1 使用Vue三步曲
- 引入Vue.js
- 准备被挂载的元素
- JS完成挂载
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--1、引入vue的js支持-->
<script src="node_modules/vue/dist/vue.js"></script>
</head>
<body>
<!--
2、准备Vue容器
可以使用id,class,标签等选择器
-->
<div id="app">
{{msg}}
</div>
<!--3、vue与容器建立关系-->
<script>
new Vue({
//el:挂载
el: "#app",
data: {
msg: "Hello,皮皮虾..."
}
})
</script>
</body>
</html>
2.2.2 Vue的重要元素
el
- el是用于完成挂载功能
- 挂载可以使用id,class,标签
- 不管使用哪些方式,都只能挂载一个
- 建议使用id进行挂载、
- 只要挂载成功的元素,才能使用vue的功能(表达式等)
data - data是咱们的数据
- 获取数据有两种方式
- 直接在js中获取/设计
- 在表达式中来获取
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vuejs/vue.js"></script>
</head>
<body>
<div id="app">
{{msg}} === {{sex}} <br>
{{employee}} === {{employee.name}}=== {{employee.age}} <br>
{{hobbys}} === {{hobbys[0]}}
</div>
<script>
var vue = new Vue({
el:"#app",
//data:代表相应的数据
data:{
msg:"我是个东西",
sex:true,
employee:{
name:"张扬",
age:18
},
hobbys:["打篮球","写代码","看别写代码"]
}
})
alert(0);
//当数据发生变化后,表达式中的数据也会同时变化
// vue.msg = "我其实不是个东西";
vue.msg = "haha"
</script>
</body>
</html>
methods
指的是咱们的方法元素
调用方法的位置
在js中直接调用
可以用表达式调用
可以直接使用this获取到data中的数据
2.3 vue的钩子方法
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。
2.3.1 vue的生命周期
每个 Vue 实例在被创建时都要经过一系列的初始化过程
创建实例
装载模板
渲染模板
Vue为生命周期中的每个状态都设置了钩子函数(监听函数)
created与mounted的区别
created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图
mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作
2.3.2 vue的表达式
- 可以使用四则运算符
- 可以使用三目运算符
- 字符串,对象,数组都可以直接操作
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--1、引入vue的js支持-->
<script src="node_modules/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{mag}} {{4+6}}
</div>
<!--3、vue与容器建立关系-->
<script>
var v = new Vue({
el: "#app",
data: {
mag: "皮皮虾"
}
});
</script>
</body>
</html>
2.4 vue重要指令
2.4.1 v-html与v-text
- html会解析HTML标签(相当:innerHTML)
- text不会解析HTML标签(相当:innerText)
<body>
<div id="app">
<!--v-html:会计算数据中的标签-->
<div v-html="msg"></div>
<!--v-text:不会计算数据中的标签-->
<div v-text="msg"></div>
</div>
<!--3、vue与容器建立关系-->
<script>
var v = new Vue({
el: "#app",
data: {
msg: "<h1>皮皮虾</h1>"
}
});
</script>
</body>
2.4.2 v-for
- 遍历咱们的数据(数字,字符串,对象,集合)
- 数字就是普通的循环 for(var i=1;i<=数字;i++)
- 字符串是拿到每一个字母
- 对象循环
①v:代表对象的属性值
②k:代表对象的属性名
③i:代表索引 - 数组循环
①v:代表对象的属性值
②i:代表索引
<body>
<div id="app">
<!--无序列表-->
<ul>
<li v-for="(item,index) in hobbys">{{index+1}} - {{item}}</li>
</ul>
<ul>
<li v-for="(val,name,index) in employee">{{name}}:{{val}}</li>
</ul>
<!--遍历字符串-->
<ul>
<li v-for="v in msg">{{v}}</li>
</ul>
<!--遍历数字-->
<ul>
<li v-for="v in num">{{v}}</li>
</ul>
</div>
<!--3、vue与容器建立关系-->
<script>
new Vue({
el: "#app",
data: {
hobbys:["皮皮虾","打","皮皮怪"],
msg:"asdasdsad",
num:12,
employee:{
name:"皮皮虾",
age:18,
sex:true,
say() {
console.log("aaaaa")
}
}
}
});
</script>
</body>
2.4.3 v-bind的使用
- bind主要是用于绑定相应的属性
<标签 v-bind:属性名="属性值">
- bind有一种简写形式
<标签 :属性名="属性值">
- 如果直接把整个对象进行属性绑定
<标签 v-bind="对象">
<body>
<div id="app">
<!--bind:绑定属性-->
<!--<img src="img/1.jpg">-->
<!--<img v-bind:src="imgUrl" v-bind:width="width" />-->
<!--bind的简写形式-->
<img :src="imgUrl" :width="width" :height="height" />
<img v-bind="imgAttr">
</div>
<!--3、vue与容器建立关系-->
<script>
new Vue({
el: "#app",
data: {
imgUrl:"img/1.jpg",
width:100,
height:100,
imgAttr:{
src:"img/1.jpg",
width:100,
height:150
}
}
});
</script>
</body>
3 Nodejs&Npm安装
3.1 安装NodeJs
- 下载后直接安装
- 安装后测试
①确定环境变量中是否有nodejs的配置
②输入命令 node -v :查看node的版本
③输入命令 npm -v : 查看npm的版本
④输入命令 npm install npm@latest -g 升级npm
3.2 idea中的npm安装
在idea下方的Teminal即可输入命令
3.3 命令学习
- 初始化命令
①npm init ->初始化,会在项目中创建一个package.json文件 (相当于建了一个maven的pom.xml文件)
②npm init -y ->初始化(跳转确定信息) - 安装命令
①全局安装(所有项目都能用)
npm install -g vue
npm -g root 安装路径
②局部安装(安装项目可以使用)
npm install/i vue
- 其它命令
①查看某个模块:npm list vue
②列表模块(查看所有模块):npm ls
③卸载模块:npm uninstall vue
④更新模块:npm update vue
⑤运行工程:npm run dev/test/online -> 平时运行使用(需要配置,现在无法执行)
⑥编译工程:npm run build -> 上线时需要进行编译(编译完扔到服务器中运行)