vue组建传参

亦凉 2021-12-10 16:35 532阅读 0赞

一、父子组件传参

vm.$emit( event, arg ) //触发当前实例上的事件

【子传父】借助一个中转的父组件自定义函数,在子组件中利用 $emit 触发父组件的这个中转函数事件,传递的参数作为中转函数的参数传给父组件,

子组件:login.vue

  1. <template>
  2. <section>
  3. <div class="login">
  4. <label>
  5. <span>用户名:</span>
  6. <input type="text" v-model="username" @change="setUser"/>
  7. </label>
  8. </div>
  9. </section>
  10. </template>
  11. <script>
  12. export default {
  13. name: 'footer',
  14. data(){
  15. return{
  16. username:""
  17. }
  18. },
  19. methods: {
  20. setUser(){
  21. //利用transferToParents事件传给父组件
  22. this.$emit('transferToParents',this.username);
  23. }
  24. }
  25. }
  26. </script>
  27. <style scoped>
  28. .login{
  29. position: fixed;
  30. top: 160px;
  31. height:60px;
  32. width: 100%;
  33. background:#333;
  34. color: aliceblue;
  35. line-height: 60px;
  36. }
  37. </style>

父组件:

  1. <p>login组建传过来的参数__用户名:{
  2. {logindata}}</p>
  3. <loginDiv @transferToParents="getUser"></loginDiv>

script中引入子组件,并获取数据

  1. <script>
  2. //引入子组件
  3. import loginDiv from './components/login'
  4. export default {
  5. name:"app",
  6. data(){
  7. return{
  8. logindata:''
  9. }
  10. },
  11. components:{
  12. loginDiv
  13. },
  14. methods: {
  15. getUser(msg){
  16. this.logindata = msg;
  17. console.log('input输入框的值:',msg);
  18. }
  19. }
  20. }
  21. </script>

20190711170636263.png

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3ODU1MjE5_size_16_color_FFFFFF_t_70

【父传子】子组件使用props接收父组件的数据。

子组件:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3ODU1MjE5_size_16_color_FFFFFF_t_70 1

父组件:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3ODU1MjE5_size_16_color_FFFFFF_t_70 2

二、兄弟组件传参

Vuex该出场了….待续。。。

Vuex都可以什么组件之间都可以传参

假设是组件header和组件content之间的传参:header中input获取的文本值显示在组件content中

组件header,更改author

组件content,实时显示更改的author

vuex的所有配置都写在store.js中,将store.js import到main.js中

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。

在mutation中定义更改state状态变量的事件,在组件中使用时,利用this.$store.commit触发调用,才可完成对state的修改。

store.js:

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. export default new Vuex.Store({
  5. state: {
  6. author:"GreyJK"
  7. },
  8. mutations: {
  9. concatAuthor(state,msg){
  10. msg = msg.replace(/([A-Z])/g,' -$&');
  11. state.author = msg;//使用msg该笔author
  12. }
  13. }
  14. })

state:状态

mutation:对state改变的处理事件

组件header,更改author

组件content,实时显示更改的author

组件中使用state中的状态变量author

组件content:

20190711183312250.png

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3ODU1MjE5_size_16_color_FFFFFF_t_70 3

组件header:

input的输入值双向绑定到inputtext

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI3ODU1MjE5_size_16_color_FFFFFF_t_70 4

按钮按下调用changeAuthor事件,事件负责提交store.js中的mutation对象的concatAuthor事件

20190711183719681.png

-——————————————————————————————————————————————————————————————————————————————————-

mapState, mapGetters, mapActions, mapMutations ,这种就是相当于在本组件中给store.js中对应的action、mutation等的方法赋别名…..

mapState, mapGetters, mapActions, mapMutations 就是简化我们的一些 this.$store.state.* 的操作,将this.$store.* 里面的状态 映射到我们辅助函数的属性值里面
方便我们在组件中调用。【
https://www.jb51.net/article/138226.htm

例如:

  1. computed: {
  2. ...mapState({
  3. viewsCount: 'views'
  4. }),
  5. ...mapGetters({
  6. todosALise: 'getToDo' // getToDo 不是字符串,对应的是getter里面的一个方法名字 然后将这个方法名字重新取一个别名 todosALise
  7. })
  8. },
  9. methods: {
  10. ...mapMutations({
  11. totalAlise: 'clickTotal' // clickTotal 是mutation 里的方法,totalAlise是重新定义的一个别名方法,本组件直接调用这个方法
  12. }),
  13.    ...mapActions({
  14. blogAdd: 'blogAdd' // 第一个blogAdd是定义的一个函数别名称,挂载在到this(vue)实例上,后面一个blogAdd 才是actions里面函数方法名称
  15. })

Vuex 详细的下一篇《Vuex详细讲解》

发表评论

表情:
评论列表 (有 0 条评论,532人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue

    一、非文件上传: @RequseParam与@RequestBody接收参数,前端传参,params传给@RequseParam,data传给@RequestBody 1、

    相关 vue组建

    一、父子组件传参 vm.$emit( event, arg ) //触发当前实例上的事件 【子传父】借助一个中转的父组件自定义函数,在子组件中利用 $emit 触发父组