vue组件传值

  1. 计算属性和方法的区别:计算属性中不会添加重复内容;方法添加会重复添加
  2. 生命周期中的销毁:普通的显示隐藏v-show并不是销毁,只是将元素隐藏
  3. ctrl+j 显示隐藏终端窗口

一、父给子传值(变量)

使用props直接写
  1. 在子页面使用props把变量暴露出去(可以是多个变量)
<template>
  <div id="headermenu">
    {{title}}
    <img :src="logo" />//注意src也需要通过绑定!
  </div>
</template>
<script>
export default {
  name: "headermenu",
  props: ["title", "logo"]
};
</script>
<style lang='less'>
</style>
  1. 在主页面的data函数中声明要传递的变量,直接使用v-bind绑定到子组件上
 data() {
    return {
      title:"首页",
      logosrc:"https://www.baidu.com/img/baidu_jgylogo3.gif"
    };

绑定到组件上

   <headermenu :title="title" :logo="logosrc"></headermenu>
使用props进行类型约束
  1. 同理先在子页面中声明接受值的变量
<template>
  <div id="headermenu">
    {{title}}
    <img :src="logo" />
    {{num}}
  </div>
</template>
<script>
export default {
  name: "headermenu",
  //直接声明
  //props: ["title", "logo"]
  //进行类型约束
  props:{
    title:String,
    logo:String,
    num:Number
  }
};
  1. 在主页面(父页面)中声明变量的值并绑定到组件上
<headermenu :title="title" :logo="logosrc" :num="num"></headermenu>
 data() {
    return {
      title:"首页",
      logosrc:"https://www.baidu.com/img/baidu_jgylogo3.gif",
      num:"100"
    };
  }

二、子给父传值(变量)

  1. 在父组件中声明一个变量准备接收传进来的值
  <div>{{children}}</div>
  1. 通过父给子传值的方式让父元素给子元素传递当前对象VueComponent
    <contentmenu :parent="self"></contentmenu>

其中self是在data中返回的thisVueComponent

如果不返回,直接拿,vue中的this为
在这里插入图片描述
什么是proxy?

摘抄一段主要内容:
Proxy对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。

其实就是在对目标对象的操作之前提供了拦截,可以对外界的操作进行过滤和改写,修改某些操作的默认行为,这样我们可以不直接操作对象本身,而是通过操作对象的代理对象来间接来操作对象,达到预期的目的

  1. 在子组件中定义要接受父组件传来的parent
 props: {
    parent: Object
  }
  1. 这样就可以直接在子组件中修改父组件的变量啦
<template>
  <div id="contentmenu">
    <button @click="sendtoBaba">给父亲传</button>
  </div>
</template>
<script>
export default {
  name: "contentmenu",
  props: {
    parent: Object
  },
  methods: {
    sendtoBaba() {
      //prop给父元素传值
      console.log(this.parent);
      this.parent.children = "我刚刚给过你啦!"
    }
  }
};
</script>
<style lang='less'>
</style>

三、父组件执行子组件的方法

  1. 父组件通过虚拟dom获取,就可以直接执行子组件的方法
    <contentmenu ref="child"></contentmenu>
    mounted() {
    this.$refs.child.parentexm()
    }
    
  1. 子组件中的方法为
parentexm() {
      console.log("父亲也执行我了");
    }

四、子组件执行父组件的方法

  1. 同理,因为已经获取过父组件,所以在子组件中直接调用方法
sendtoBaba() {//忽略这个名称,别被误导了这是写上面的东西时用的
      this.parent.giveme();
    }
  1. 父组件中的方法为
  methods: {
    giveme() {
      console.log("儿子执行父亲!");
    }
  }

五、事件广播,事件车监听

  1. 非父组件传值方法一

  2. 监听先于传值(异步)=

  3. vue2.0中可以使用 $emit, $on, $off 分别来分发(发送)、监听、取消监听事件。官方明确说明了 一个空的vue实例就可以做到,因为Vue 实例实现了一个事件分发接口.

  4. //调用$emit 方法
    this.$root.eventHub.$emit('你的事件名字', 你的需要传送的数据)

  5. 接收方法(注意接收的事件名称要和发送的事件名称一致)
    this.$root.eventHub.$on('你的事件名字', (传送的数据)=>{ handle(yourData) } )
    6.本例中footer和content组件是非父子组件(同级兄弟组件)

  1. 新建emit.js文件,在其中引入vue,创建一个空的vue实例
//事件车
import Vue from 'vue';
const vue = new Vue();
export default vue;

  1. content组建中发送数据
import emit from '../emit/emit.js'
//省略框架……
  methods: {
    sendmsg(){
      //发送广播
      //参数:键值,数据
      emit.$emit("msginfo","你是footer组件哦!")
    }
  }
  1. 在footer中接收
<template>
  <div id="footmenu">底部</div>
</template>
<script>
import emit from "../emit/emit.js";
export default {
  name: "footmenu",
  mounted() {
    //自动监听
    emit.$on("msginfo", res => {
      console.log(res);
    });
  }
};
</script>

六、子组件可以直接拿到父组件

  mounted() {
    console.log(this.$parent)
  }

所以在之前子组件给父组件传值的时候就可以直接使用this.$parent,而不是让父组件先把自身传进来

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值