1.nodejs
2.vue-cli
3.创建项目:vue ui vue create 项目名(不能用纯VUE做名字)当我们拿到别人的项目的时候,一般情况下是没有node_modules包。需要使用命令去初始化依赖。
`npm install`
`yarn add`1.assets存放静态资源的 2.components存放组件的,公共组件等 3.views存放视图组件的,表示独立的页面
1.函数命名:fn_name 2.对象:o_name 3.数组:a_name 4.字符串:s_name 5.数字:n_name 6.小组合作开发的时候,页面的名字_+功能的名字_+自己名字的缩写_+工号
{{}}等价 权重方便v-text优先于插值{{}}<div v-for="(value,index) in arr" v-bind:key="index">{{value}}</div>
特性:必须在被循环渲染的元素上加key,且key的值对元素是隐藏的,只是给diff算法用的
不要在循环元素使用v-if
渲染值类型:字符串,数字,数组,对象v-on:eventName简写@eventName.stop阻止事件冒泡
.prevent阻止默认事件.enter 或.13 监听回车Vue.config.keyCodes.myCode=keyCodesbeforeCreate 创建前
created 创建后beforeMount 挂载前
mounted 挂载完成beforeUpdate 更新前
updated 更新后beforeDestroy 销毁前
destroyed 销毁后beforeCreate() {
//骨架屏技术
console.log('创建前')
},
created() {
//ajax可以写这里,但非常不推荐
//vue里面有一个服务端渲染,在使用服务端渲染的时候,beforeMount,mounted两个函数失效--不会执行
//爬虫--seo:只爱爬写死的静态页面
console.log('创建后')
},
//挂载
beforeMount() {
console.log('挂载前')
},
mounted() {
//页面渲染成功后,发起ajax请求
console.log('挂载后')
},
//更新:props和data数据发生修改,触发
beforeUpdate() {
//更新前函数中可以修改data
this.count++
console.log('更新前')
},
updated() {
//更新后的函数中只能用于观察修改后的data
console.log('更新后', this.count)
},
//销毁
beforeDestroy() {
console.log('销毁前')
},
destroyed() {
console.log('销毁后')
},
}v-modelyarn add element-ui1.普通写法:
props:['props1','props2']2.配置写法:
exprot default{
props:{
//设置默认值
obj;{
//如果是对象或数组使用函数
type:Object,
default:function(){
return {}
}
}
//简单的初始值
count:{
type:Number,
default:100,
}
}
}1.常规方式
parent获取父组件实例对象,直接修改或调用【非常不推荐】
this.$emit('input',newData)概念:当我们在子组件上使用使用v-model的时候,会自动的向子组件注入一个value值和input函数, 子组件如果想修改value就是用$emit调用input函数名
作用:使父子组件进行双向的伪绑定 语法: 1.父传子:
v-bind:prop.sync='prop'2.子传父:
this.$emit('updata:prop',newData)props 父传子【常用】
<Myslot>内容或标签</Myslot> <slot></slot><template v-slot:header>
内容或标签
</template>子组件接收
<slot name='header'></slot>// 子组件
<slot name='header' :data='data></slot>
// 父组件
<template #header='data'>{{data}}</template>父组件
<template v-slot:default="{ data }">
<h1>{{ data }}</h1>
</template>子组件
<slot data="李云龙"></slot>全局状态管理器
state到组件,组件通过dispatch调用actions进行通信,actions通过commit调用mutations修改state, state是双向数据响应的,会自动让组件更新
{mapState},{mapGetters},{mapMutations},{mapActions}
# router根据不同的地址呈现不同的内容或页面
导航 router-link 视图 router-view 配置 router
表示当前项目全局的路由实例对象
表示当前路由页面的信息对象
声明式导航
router-link编程式导航$router.push()
push() 向历史记录添加一条 go() 通过数字控制前进后退 back() 返回上一个历史记录 replace()用最新地址替换当前历史记录
hash history abstract
params 动态路由是显式传参,非动态路由使用params传参叫隐式传参 隐式的参数在内存里,刷新页面就丢了。params传参只能通过命名路由name跳转 meta 元数据,用于传参,更多情况下用于配置路由的权限 query 以?开头的get请求传参方式
动态路由 一组拥有相同基础路径的路由,加载的是同一个页面 嵌套路由 一组拥有相同基础路径的路由,加载不同的页面
每个路由守卫都有一个回调函数,该函数里有三个参数,分别是to,from,next
beforeEach 前置守卫 afterEach 后置守卫 没有next
beforeRouteUpdata 准备路由更新 beforeRouteLeave 准备离开路由
name: 路由命名,给路由取名字 path: 匹配浏览器地址栏里的地址 component:加载组件 alias:给路由取别名 区别:地址栏不显示地址 redirect: 重定向 区别:地址栏显示地址 meta:元数据,用于路由配置里的传参 children:嵌套路由的api
{
path:'/book/:id',
component:Book,
children:[
{
path:'hot',
component:Hot
}
]
}mode router scrollBehavior