es6常用语法
变量的定义
var变量的提升
const常量的定义
let块级作用域
箭头函数
类比python的匿名函数lamda let fun2 = x => x+1;<br> console.log(fun2(5)) <br>
this
普通函数取决于函数最近的调用者
箭头函数取决于当前上下文的环境
定义类
class
构造方法 constuctor
继承 extends
子类没有this 需要用super方法找到父类的this
vue的常用指令 <font color="#f384ae">都是等于一个变量 <br> 声明一个Vue对象 在data中写变量<br></font><font color="#f384ae"><br></font>
v-for
v-if v-else-if v-else appendChild
vue指令修饰符
.lazy 懒加载
.number
自定义指令
Vue.dirctive("指令名称", function(el, binding){<br> <br>el 绑定指令的标签元素<br> <br>binding 指令的所有信息组成的对象<br> <br>value 指令绑定数据的值<br> <br>modifires 指令修饰符<br> })
.trim
获取DOM
给标签加ref属性 ref=‘xxxx’<br>this.$refs.xxxx
计算属性
computed<br> 放入缓存 当数据改变的时候才会重新执行计算<br> 跟data中数据的区别
数据的监听 watch去监听
数组
-- 只能监听到长度的变化 新旧值相同的<br> -- 改变数组值的时候监听不到<br> 必须用$set(array, index, value) <br> 新旧值相同的
对象
vue组件
全局注册<br>任何Vue实例里用 <br><组件名称></组件名称><br>
-- Vue.component("组件名称", {<br> template: `只识别一个块级作用域`,<br> data(){<br> return{<br> name: xxxx<br> }<br> },<br> methods: {},<br> })
局部注册<br><div><组件名称></组件名称></div><br>
-- let com_config = {.....}<br> -- const app = new Vue({<br> el: "#app",<br> components: {<br> 组件名称: com_config<br> }<br> })
子组件的注册<br>-- 在父组件的template里展示子组件<br> <child></child><br>
在父组件里 components: {<br> 子组件的名称: 子组件的配置信息<br> }
通信
父子通信
先给子组件绑定属性<br>在子组件通过props:["属性名称"]<br>
子父通信
-- 子组件先提交事件<br> this.$emit("事件名称", data)<br> -- 父组件 给子组件绑定事件<br> 自己处理这个事件
非父子通信
-- 定义一个中间调度器<br> let Event = new Vue();<br> -- 其中一个组件向中间调度器提交事件<br> Event.$emit("事件名称", data)<br> -- 另一个组件要监听中间调度器里的事件<br> Event.$on("事件的名称", function(data){<br> 注意this的问题<br> })
混合
-- 复用共用的代码块<br> -- mixins: [base]
插槽
-- 实现组件内容的分发<br> -- slot<br> -- 直接用slot标签<br> -- 命名的slot<br> -- 先给slot加name属性<br> -- 给标签元素添加slot属性= name属性值
vue的路由<br> $route 路由的所有信息组成的对象<br>
注册
<ol><li>定义一个匹配规则对象<br>let url = [<br> {<br> path: "/",<br> component: {<br> }<br> }<br> ]<br></li></ol>
2.实例化VueRouter对象 并把匹配规则注册进去<br>let router = new VueRouter({<br> routes: url<br> })<br>
3. 把VueRouter实例化对象注册Vue的根实例<br>const app = new Vue({<br> el: "#app",<br> router: router<br> })<br>
router-link<br>router-view<br>
子路由的注册
在父路由里注册children: [{},{}]
在父路由对应的组件里的template里<br> 写router-link router-view
路由的命名
name<br> -- 注意to一定动态绑定 :to="{name: ''}"
路由的参数
this.$route.params.xxxx<br> this.$route.query.xxxx
手动路由
this.$router.push("/course")<br> this.$router.push({name:'', params:{},query: {})
钩子函数
router.beforeEach(function(to, from, next){<br> to 你去哪里<br> from 你从哪里来<br> next 你接下来要做什么<br> })<br>路由的重定向
router.afterEach(function(to, from){})
Vue的生命周期
beforecreated :el 和 data 并未初始化
created:完成了data数据的初始化 el 没有
beforeMount:完成了el 和 data的初始化
mounted:完成了挂载
beforeupdate
updated
beforedestroy <br>触发了destroy相关的钩子函数,也就是说组件被销毁~<br><br>更改message的值~DOM中的值不变~也就是说DOM元素依然存在只是不受vue控制了~~<br>
destroyed
npm,webpack,vue-cli
node.js npm
Node.js <br>就是运行在服务端的JavaScript,<br>基于Chrome V8 引擎的。
node -v查看node的版本
npm
npm 是Node.js 的包管理工具。
npm init -y
输入-y使用默认配置项 生成package.json文件
安装npm install xxxx@0.0.0
卸载 npm uninstall
列出已安装的依赖 npm list
npm -v 查看npm版本信息
模块打包器webpack
默认的入口文件<br> 手动创建的src/index.js
默认的出口文件<br> dist/main.js<br>
全局安装 npm install webpack webpack-cli -g -D
模式区分·<br>webpack --mode development/<br>production<br>
development 开发者模式 打包默认不压缩代码
production 生产者模式 上线时使用,压缩代码。 默认是这个模式
vue-cli
脚手架帮助我们搭建Vue项目的
搭建项目
vue init webpack 项目名称
项目的启动
cd 项目目录下<br> npm run dev
<font color="#f15a23">vue-cli项目目录</font>
build 打包后存放的所有文件包括配置文件<br> config 配置文件<br> node_models 依赖包<br> src 工作目录<br> static 静态文件<br> index.html 单页面应用<br> package.json 存放所有项目信息
<font color="#f384ae">路由的解耦</font>
下载 npm i vue-router<br> -- 导入 import VueRouter from "vue-router"<br> -- Vue.use(VueRouter)<br> -- 定义匹配规则url<br> -- 实例化VueRouter <br> -- 把VueRouter对象注册到Vue的根实例里
vuex axios
vuex
下载 npm i vuex
store文件夹index.js<br>注意:<br><font color="#f15a23"> 每个组件存放仓库中的数据用计算属性</font><br>
import Vuex from "vuex"<br> import Vue from "vue"
<br> Vue.use(Vuex)<br> <br><font color="#f15a23"> export default</font> new Vuex.Store({<br> state: {<br> 存放所有的公用数据<br> }<br> })
getters
getters 给state中的数据做二次处理的
{<br> 数据名称:function(state, getters){<br> return state.xxx + "文周"<br> }<br> }
-- 组件中得到getters中数据<br> this.$store.getters.xxxx
mutations
任何一个组件想要修改仓库中的数据必须告诉仓库<br> -- 给仓库提交事件<br> this.$store.commit("事件名称", data)
mutations: {<br> 事件名称: function(state, data){<br> state.xxx = data<br> }<br> }<br>
main.js
import store from "store文件夹index.js"
把store注册到Vue的根实例里<br> new Vue({<br> el: "",<br> router,<br> store<br> })
axios
下载 npm i axios
导入 import axios from "axios"
加入Vue的原型链 Vue.prototype.$axios = axios
<font color="#f15a23">在每个组件里发送请求</font><br> this.$axios.request({<br> url: 接口地址,<br> method: 请求方式<br> data: 请求数据<br> headers: 请求头<br> }).then(function(data){})<br> .catch(function(data){})
跨域
原因<br> 浏览器的同源策略进行阻拦
解决办法
JsonP<br> 利用浏览器同源策略不阻止src的请求
中间件定义mycore允许通过
简单请求
复杂请求