vue,组件传值

组件的传值:

1. 父传子:

1.在父组件中给子组件中设置一个属性,在这个属性上挂载要传递的值。

2.在子组件中用props来接受数据

3.props可以传递的类型有:

  • String(字符串)
  • data(对象)
  • Bollean(布尔值)
  • Array(数组)
  • Number(数字)
  • 父组件:(组件名称:Father)

    <template>
        <div>
           // 调用子组件;
           <Children  
              v-for='(item,index) in goods'
              :key='index'
              :title='item.title'
              :price='item.price'
           >   
           </Children>   
        <div>
    </template>
    <script>
        import Children from '@/Children'
        export default{
            // 这里是注册组件
            components:{
                Children,
            }
            data(){
                return{
                    goods:[
                        {
                            title:"柚子小哥哥",
                            price:10,
                        },
                        {
                            title:"柚子小哥哥",
                            price:20,
                        }
                    ]
                }
            }
        }
        
    </script>
    <style scoped>
    <style>
        
    
  • 子组件:(组件名称:Children)

    <template>
        <div>
           <p> {{title}} </p>
           <p> {{price}} </p>
        <div>
    </template>
    <script>
        export default{
            props:[
                title:String,
                price:Number,
            ],
        }
        
    </script>
    <style scoped>
        //这里的scoped是局部的css样式,
        // 这里没有加scoped的话是全局的css样式
    <style>
    
    

2. 子传父:

  1. 在子组件中自定义事件名称,在这个自定义事件名称绑定上要执行的函数。
  2. 在父组件中使用 this.$emit ("自定义事件名称 ") 来执行这个函数
  • 父组件:(组件名称:Father)

    <template>
        <div>
           <span @Hello=‘World’> 父组件1</span>
        </div>
    </template>
    <script>
        export default{
         data(){
             return{}
         },
          methods:{
              World(str){
                  console.log('这是父组件的..'str)
              }
          }
    }
    </script>
    <style scoped>
    </style>
    
  • 子组件:(组件名称:Children)

    <template>
        <div>
           <Button @click=‘’text>调用父组件的函数方法</button>
        </div>
    </template>
    <script>
        export default{
         data(){
             return{}
         },
         methods:{
            text(){
                let str='柚子小哥哥'this.$emit('Hello',str)
            }}
    
~~~

3. 兄弟组件传值:

我们在做项目的时候,会遇到组件传值,有父传子,子传父,兄弟传值,在遇到大型项目的时候,会用到vuex。

######  兄弟组件传值的思路是:

子传父:给按钮botton绑定一个handleClick事件,事件中我们通过 this. e m i t ( ) 方 法 去 触 发 一 个 自 定 义 事 件 , 并 传 递 我 们 的 参 数 。 示 例 中 我 们 通 过 t h i s . emit() 方法去触发一个自定义事件,并传递我们的参数。示例中我们通过this. emit(this.emit()去触发isLogFn 这个方法自定义事件,并将log 参数传递出去。我们要在父组件中去监听这个自定义事件,去触发对应的方法,并接受a组件传过来的参数。此时我们就完成了子组件向父组件传值的过程。然后b组件中需要创建props,定义一个isLog 属性,这个属性就是我们传过来的数值。然后我们在计算属性中处理这个数据,最终供b组件使用。示例中,我们在v-show=”isLogin” 中用来控制弹窗是否打开。
a.vue 子组件

  • 子组件

<template>
  <div>
    <button type="button" @click="handleClick">弹窗</button>
  </div>
</template>
<script>
export default {
  methods: {
    handleClick () {
      this.$emit('isLogFn','log')
    }
  }
}
</script>
<style>
</style>
  • 父组件
<template>
  <div>
    <aPage @isLogFn = "lisLogFn"></aPage>
    <bPage :isLog = "login"></bPage>
  </div>
</template>
<script>
import aPage from './components/a.vue'
import bPage from './components/b.vue'
export default {
  data () {
    return {
      login: 'false'
    }
  },
  name: 'app',
  components: {
    aPage,
    bPage
  },
  methods: {
    lisLogFn (data) {
      if (data == 'log') {
        this.login = 'true'
      }
    }
  }
}
</script>

  • 子组件:

<template>
  <div   v-show="isLogin">我是组件B弹窗</div>
</template>

<script>
export default {
  props: ['isLog'],
  data () {
    return {

    }
  },
  //不能直接使用这个props,一定要经过computed处理,因为props是单项数据流,当父组件的属性变化时,将传导给子组件,但是反过来不会。这是为了防止子组件无意间修改了父组件的状态,否则Vue 会在控制台给出警告。
  computed: {   
    isLogin () {
      if(this.isLog == 'true'){
        return true
      } else {
        return false
      }
    }
  }
}
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue组件传值Vue.js中非常重要的一个概念,它涉及到父子组件之间的数据传递和通信。下面是一些常见的Vue组件传值面试题及其答案: 1. 请介绍Vue组件之间的父子组件传值方式。 答:Vue组件之间的父子组件传值方式有props和$emit。通过props可以将数据从父组件传递给子组件,子组件通过props接收数据。而$emit则是在子组件中触发一个自定义事件,并通过事件参数将数据传递给父组件。 2. 请介绍Vue组件之间的兄弟组件传值方式。 答:Vue组件之间的兄弟组件传值方式可以通过共享状态管理工具(如Vuex)或者事件总线来实现。使用共享状态管理工具可以在全局定义一个状态,兄弟组件通过读取和修改该状态来进行数据传递。而事件总线则是在Vue实例上定义一个事件中心,兄弟组件通过$emit和$on来进行事件的发布和订阅,从而实现数据传递。 3. 请介绍Vue组件之间的跨级组件传值方式。 答:Vue组件之间的跨级组件传值方式可以通过provide和inject来实现。父级组件通过provide提供数据,然后子孙级组件通过inject来注入数据。这样就可以实现跨级组件之间的数据传递。 4. 请介绍Vue组件之间的非父子组件传值方式。 答:Vue组件之间的非父子组件传值方式可以通过事件总线、Vuex或者localStorage等方式来实现。事件总线和Vuex的方式在前面已经介绍过了,而localStorage则是通过将数据存储在浏览器的本地存储中,然后在其他组件中读取该数据来实现非父子组件之间的数据传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚子·小哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值