Vue数据传递的方法

组件时Vue.js最强大的功能,组件可以封装重用的代码,通过传入对象的不同,实现组件的复用,但组件传值就成为一个需要解决的问题。

父组件向子组件传值

组件实例的作用域时孤立的。这意味着不能在子组件的模板内直接引用父组件的数据,要让子组件使用父组件的数据,我们需要通过子组件的props选项实现。
子组件:

1
2
3
4
<template>
<header>
<div id="app">{{logo}}</div>
</template>

子组件需要从父组件获取logo的值,就需要使用props:[‘logo’]

1
2
3
4
5
6
7
8
<script>
export default {
data() {
return {}
},
props: ['logo']
}
</script>

父组件:

1
2
3
4
5
6
<template>
<header>
<div id="app">
<header :logo="logoMsg"></header>
</div>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
import header from './components/header'

export default {
data() {
return {
logoMsg: 'hello'
}
},
components: {
header
}
}
</script>

子组件向父组件传值

子组件主要通过事件传递数据给父组件
子组件:

1
2
3
4
5
6
7
8
9
10
<template>
<section>
<div>
<label>
<span>用户名:</span>
<input v-model="username" @change="setUser" />
</label>
</div>
</section>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script>
export default {
data() {
return {
username: ''
}
},
methods: {
setUser: function() {
this.$emit('transferUser', this.username)
}
}
}
</script>

其中transferUser是一个自定义的事件,this.username将通过这个事件传递给父组件

父组件:

1
2
3
4
5
6
<template>
<div id="app">
<login @transferUser="getUser"></login>
{{user}}
</div>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
import login from './components/login'

export default {
data() {
return {
user: ''
}
},
methods: {
getUser(msg) {
this.user = msg
}
},
components: {
login
}
}
</script>

getUser方法中的参数msg就是从子组件传递过来的参数username

路由传值

1
2
3
4
5
6
this.$router.push({
name: 'route',
query/params: {
routParams: Params
}
})

在跳转页面的时候在页面中使用< router-link>标签进行路由传值。

需要之一的时,使用params传值的时候,在页面刷新的时候,参数会消失,使用query则不会有这个问题。
取值方式为:

1
2
this.$route.params.paramName
this.$route.query.paramName

通过localStorage或者sessionStorage来存储数据

setItem存储value

  • 用途:将value存储到key字段
  • 用法:.setItem(key,value)
1
2
sessionStorage.setItem("key","value")
localStorage.setItem("site","value")

使用getItem获取value

  • 用途: 获取指定key本地存储的值
  • 用法:.getItem(key
1
2
var value = sessionStorage.getItem("key")
var site = localStorage.getItem("site")

Vuex

在应用复杂的时候,可以使用Vuex来统一管理数据状态

  • Vuex:可以理解是全局状态管理的一个插件,理论上所有组件都能拿到Vuex里面的数据
  • State:可以理解为组件中的data,就是放数据的地方
  • Mutation: 可以理解为提交数据给data的方法(同步)
  • Action: 可以理解为提交数据给Mutation然后通过Mutation再提交给data的方法(异步)
  • Getter: 可以将data的数据进行过滤,然后组件通过Getter方法获取过滤的data
-------------本文结束感谢您的阅读-------------