vue知识点总结

父组件向子组件传递数据
在子组件中使用 props 从父组件接收参数。注:在 props 定义的属性,都可以在组件中直接使用
props 来自父组件,而组件中 data return 的数据是子组件自己的,作用域是组件本身,可以在 template、computed、methods使用
props 的值有两种:一种是字符串数组;一种是对象
可以使用 v-bind 动态绑定父组件内容
v-bind 使用与否向子组件传递数据区别:使用 v-bind:会将后边内容转化为可转化的类型;不使用 v-bind:传递数据时,默认字符串
单向数据流:通过 props 传递数据单向,子传父不行
目的:解耦。避免子组件修改父组件状态
两种情景:

父组件传递初始值进来,子将其作为初始值保存起来,在自己作用域下随意使用(在 data 中再申明数据,应用父 props )
props 作为需要被转变的原始值传入(使用计算属性进行重算)
命名规则:Vue中使用驼峰
在组件中的 html 必须使用短横线命名
在组件中,父组件给子组件数据,必须短横线。在 template 中,必须使用驼峰命名
在组件中的 data 中,用 this.xxx 引用时,只能是驼峰命名
子组件给父组件传递数据
子组件通过 e m i t ( ) 发 布 订 阅 模 式 , 父 组 件 订 阅 该 模 式 : emit() 发布订阅模式,父组件订阅该模式: emit()emit(‘fn’,参数1) 参数1传入父组件函数
$emit() 的代码 实际上会传一个 input 事件, input 后的参数就是传递给 v-model 绑定的属性值
v-model其实是一个语法糖:1. v-bind 绑定一个 value 元素;2. v-on 指令给当前元素绑定 input 事件
要使用 v-model 必须:1. 接收一个 value 属性;2. 在有新的 value 触发 input 事件

非父组件通信:可以使用一个空 Vue 实例作为中转
父: var bus=new Vue()
子A: bus. e m i t ( ′ 变 量 名 ′ , x ) 触 发 A 事 件 子 B : b u s . emit('变量名',x) 触发A事件 子B: bus. emit(,x)ABbus.on(‘变量名’,function(){}) 子B创建的钩子监听

父链:this. p a r e n t 子 链 : 通 过 给 子 组 件 添 加 r e f 属 性 增 加 索 引 r e f = ′ a ′ 。 t h i s . parent 子链:通过给子组件添加 ref 属性增加索引 ref='a' 。this. parentrefref=athis.refs.c

自定义指令
与组件相同,分为全局注册和局部注册(组件中使用 directives )

提供的钩子函数:

bind:只调用一次,指令第一次绑定到元素时
inserted:绑定元素插入父节点时调用
update:绑定元素所在模板更新时调用,不管绑定值是否变化
componentUpdated:完成一次更新周期调用
unbind:解绑,只调用一次
钩子函数的参数:

el:指令所绑定元素
binding:一个对象包含以下属性:name:指令名;value:指令绑定值;oldValue:指令绑定的前一个值;expression:绑定值的字符串形式;arg:传给指令的参数;modifiers:包含修饰符的对象
vnode:Vue 编译生成的虚拟节点
oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用
render函数
template 可以在 DOM 结构中的

在 render 函数的方法中,参数必须是 createElement ,类型为 Function
render 函数:在该函数中 return 的是 createElement 函数
在 createElement 函数中第一个参数(必选)可以是 string、Object、Function
string: html 标签
object:一个含有数据选项的对象 { template : ‘

’ }
function:方法返回含有数据选项的对象
第二个参数可选:数据对象,只能是 Object 。可以有 class:{类名:true} 、 style:{} 、attrs:{id:‘id名’} 、domProps:{innerHTML:’ ’} (用来写原生的 DOM 属性)
第三个参数可选: string 或 array
//createElement函数的三个参数
createElement(
// {String | Object | Function}
// 一个 HTML 标签字符串,组件选项对象,或者
// 解析上述任何一种的一个 async 异步函数。必需参数。
‘div’,

// {Object}
// 一个包含模板相关属性的数据对象
// 你可以在 template 中使用这些特性。可选参数。
{
// (详情见下一节)
},

// {String | Array}
// 子虚拟节点 (VNodes),由 createElement() 构建而成,
// 也可以使用字符串来生成“文本虚拟节点”。可选参数。
[
‘先写一些文字’,
createElement(‘h1’, ‘一则头条’),
createElement(MyComponent, {
props: {
someProp: ‘foobar’
}
})
]
)
this. s l o t s 在 r e n d e r 函 数 中 第 三 个 参 数 就 是 v n o d e v a r h e a d e r = t h i s . slots在render函数中 第三个参数就是 vnode var header=this. slotsrendervnodevarheader=this.slots.header
createElement(‘header’,header) ‘header’ 标签;header 第三个参数,数组
注意:render函数中第二个参数,绑定监听事件时

return createElement(‘input’,{
on:{
input:function(event){
var a=this //此时的this指的是window
}
}
})
所以要在 render 函数中指定 Vue 实例,如:

render:function(createElement){
var self=this //此时的 this 就是 Vue 实例
}
作用域插槽在 render 函数
scope 最好写在 template 标签
scope 后边是 render 函数传来的数据

return createElement(‘div’,this. s c o p e d S l o t s . d e f a u l t ( t e x t : ′ 我 是 子 组 件 数 据 ′ / / s c o p e 后 的 数 据 ) ) 函 数 化 组 件 标 记 组 件 为 f u n c t i o n a l , 当 该 值 为 t r u e 时 , 意 味 它 是 无 状 态 ( 没 有 响 应 式 数 据 ) , 无 实 例 ( 没 有 t h i s 上 下 文 ) 。 此 时 , c o n t e x t 转 变 , 作 为 r e n d e r 函 数 的 第 二 个 参 数 , t h i s . scopedSlots.default({ text:'我是子组件数据' // scope后的数据 })) 函数化组件 标记组件为 functional,当该值为 true 时,意味它是无状态 (没有响应式数据),无实例 (没有 this 上下文)。 此时, context 转变,作为 render 函数的第二个参数,this. scopedSlots.default(text://scope))functionaltrue()(this)contextrenderthis.slots.default 更新为 context.children,之后 this.level 更新为 context.props.level 。

vue-router
安装 npm install --save vue-router
引用 import router from ‘vue-router’ 使用 Vue.use(router)
配置路由文件,在 Vue 实例中注入
//配置路由文件
new Vue({
router : [{
path : ‘/’, //跳转路径
component : //跳转组件
}]
})
//在 Vue 实例中注入
new Vue({
el : ‘#app’,
router : router,
component : { App },
template : ‘’
})
确定视图加载位置
vue-router 路由跳转

vue-router 传参数
必须在路由内添加路由的 name
必须在 path 后添加 :/+传递的参数(配置路由文件)

读取参数: $route.params.xxx
方式:====/helloworld/xxx


方式:====/helloworld?name=xxx&msg=yyy (不常用)

Axios
安装 npm install axios
引入加载 import axios from ‘axios’
将 axios 全局挂载到 Vue 原型 import Vue from ‘vue’ Vue.prototype. h t t p = a x i o s 发 请 求 t h i s . http=axios 发请求 this. http=axiosthis.http.get(‘xxx’).then(function(res){}).catch(function(err){console.log(err)})
两种传参形式:

axios.get( ‘/user’ , { params : { ID : 1234 } } )
axios.get( ‘/user’ , { ID : 1234 } ) (只有一个参数时)或 axios.get(‘xxxxx?page=1&limit=15’)
Axios之POST
post 传递数据两种格式:

form-data?page=1&limit=15
x-www-form-urlencoded{page:1,limit:10}
在 axios 中, post 请求接收的参数必须是 form-data
qs 插件------- qs.stringify

Vuex之store
用来管理状态,共享数据,在各个组件之间管理外部状态

引入 Vuex ,并 use 方法使用
创建状态仓库(store,state不能改)
var store=new Vuex.Store({
state:{xxx:xxx},//状态
mutations:{}
})
直接通过 this.$store.state.xxx 拿到全局状态
Vuex相关操作
View > actions(非必须,可添加异步)> mutations ====> state ====> View

在 store 仓库中使用 mutations:{a:function(state){}}
调用: this. s t o r e . c o m m i t ( x x x ) 此 处 x x x 是 m u t a t i o n s 中 定 义 的 方 法 名 s t o r e 中 定 义 a c t i o n s : b : f u n c t i o n ( c o n t e x t ) c o n t e x t . c o m m i t ( ′ a ′ ) ( 可 有 可 无 , 可 添 加 异 步 ) 调 用 : t h i s . store.commit(xxx) 此处 xxx 是 mutations 中定义的方法名 store 中定义 actions:{b:function(context){context.commit('a')}} (可有可无,可添加异步) 调用: this. store.commit(xxx)xxxmutationsstoreactions:b:function(context)context.commit(a)this.store.dispatch(xxx)
store 中定义 getters:{c:function(state){return xxxx}}
调用:this.$store.getters.xxxx (判断状态)
注意: actions 提交的是 mutations ,而不是直接变更状态; actions 可以包含异步操作,但 mutation 只能同步操作

作者:猫晓封浪
链接:https://www.jianshu.com/p/504495579886
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值