美食 健康 常识 生活 日常 合同 家居 养生 国学 心理学 中医 植物 营销 动物 汽车 管理 旅游 投资 人工智能 数字化 消费 元宇宙 金融 饮食 史学 经济
  • 会员

  • 组件间怎么通信?盘点Vue组件通信方式

    Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异;本文将通过选项式API 组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式。其中将要实现的通信方式如下表所示。

    方式Vue2Vue3
    父传子propsprops
    子传父$emitemits
    父传子$attrsattrs
    子传父$listeners无(合并到 attrs方式)
    父传子provideprovide
    子传父injectinject
    子组件访问父组件$parent
    父组件访问子组件$children
    父组件访问子组件$refexpose&ref
    兄弟传值EventBusmitt

    props

    props是组件通信中最常用的通信方式之一。父组件通过v-bind传入,子组件通过props接收,下面是它的三种实现方式。

    • 选项式API
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child :msg="parentMsg" />
    
      </div>
    
    </template>
    
    <script>
    
    import Child from './Child'
    
    export default {
    
      components:{
    
        Child
    
      },
    
      data() {
    
        return {
    
          parentMsg: '父组件信息'
    
        }
    
      }
    
    }
    
    </script>
    
     
    
     
    
    //子组件
    
     
    
    <template>
    
      <div>
    
        {{msg}}
    
      </div>
    
    </template>
    
    <script>
    
    export default {
    
      props:['msg']
    
    }
    
    </script>
    • 组合式Api
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child :msg="parentMsg" />
    
      </div>
    
    </template>
    
    <script>
    
    import { ref,defineComponent } from 'vue'
    
    import Child from './Child.vue'
    
    export default defineComponent({
    
      components:{
    
        Child
    
      },
    
      setup() {
    
        const parentMsg = ref('父组件信息')
    
        return {
    
          parentMsg
    
        };
    
      },
    
    });
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
            {{ parentMsg }}
    
        </div>
    
    </template>
    
    <script>
    
    import { defineComponent,toRef } from "vue";
    
    export default defineComponent({
    
        props: ["msg"],// 如果这行不写,下面就接收不到
    
        setup(props) {
    
            console.log(props.msg) //父组件信息
    
            let parentMsg = toRef(props, 'msg')
    
            return {
    
                parentMsg
    
            };
    
        },
    
    });
    
    </script>
    • setup语法糖
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child :msg="parentMsg" />
    
      </div>
    
    </template>
    
    <script setup>
    
    import { ref } from 'vue'
    
    import Child from './Child.vue'
    
    const parentMsg = ref('父组件信息')
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
            {{ parentMsg }}
    
        </div>
    
    </template>
    
    <script setup>
    
    import { toRef, defineProps } from "vue";
    
    const props = defineProps(["msg"]);
    
    console.log(props.msg) //父组件信息
    
    let parentMsg = toRef(props, 'msg')
    
    </script>

    注意

    props中数据流是单项的,即子组件不可改变父组件传来的值

    在组合式API中,如果想在子组件中用其它变量接收props的值时需要使用toRef将props中的属性转为响应式。

    emit

    子组件可以通过emit发布一个事件并传递一些参数,父组件通过v-on进行这个事件的监听。

    • 选项式API
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child @sendMsg="getFromChild" />
    
      </div>
    
    </template>
    
    <script>
    
    import Child from './Child'
    
    export default {
    
      components:{
    
        Child
    
      },
    
      methods: {
    
        getFromChild(val) {
    
          console.log(val) //我是子组件数据
    
        }
    
      }
    
    }
    
    </script>
    
     
    
    // 子组件
    
     
    
    <template>
    
      <div>
    
        <button @click="sendFun">send</button>
    
      </div>
    
    </template>
    
    <script>
    
    export default {
    
      methods:{
    
        sendFun(){
    
          this.$emit('sendMsg','我是子组件数据')
    
        }
    
      }
    
    }
    
    </script>
    • 组合式Api
    /父组件
    
     
    
    <template>
    
      <div>
    
        <Child @sendMsg="getFromChild" />
    
      </div>
    
    </template>
    
    <script>
    
    import Child from './Child'
    
    import { defineComponent } from "vue";
    
    export default defineComponent({
    
      components: {
    
        Child
    
      },
    
      setup() {
    
        const getFromChild = (val) => {
    
          console.log(val) //我是子组件数据
    
        }
    
        return {
    
          getFromChild
    
        };
    
      },
    
    });
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
            <button @click="sendFun">send</button>
    
        </div>
    
    </template>
    
     
    
    <script>
    
    import { defineComponent } from "vue";
    
    export default defineComponent({
    
        emits: ['sendMsg'],
    
        setup(props, ctx) {
    
            const sendFun = () => {
    
                ctx.emit('sendMsg', '我是子组件数据')
    
            }
    
            return {
    
                sendFun
    
            };
    
        },
    
    });
    
    </script>
    • setup语法糖
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child @sendMsg="getFromChild" />
    
      </div>
    
    </template>
    
    <script setup>
    
    import Child from './Child'
    
    const getFromChild = (val) => {
    
          console.log(val) //我是子组件数据
    
        }
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
            <button @click="sendFun">send</button>
    
        </div>
    
    </template>
    
    <script setup>
    
    import { defineEmits } from "vue";
    
    const emits = defineEmits(['sendMsg'])
    
    const sendFun = () => {
    
        emits('sendMsg', '我是子组件数据')
    
    }
    
    </script>

    attrs和listeners

    子组件使用$attrs可以获得父组件除了props传递的属性和特性绑定属性 (class和 style)之外的所有属性。

    子组件使用$listeners可以获得父组件(不含.native修饰器的)所有v-on事件监听器,在Vue3中已经不再使用;但是Vue3中的attrs不仅可以获得父组件传来的属性也可以获得父组件v-on事件监听器

    • 选项式API
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child @parentFun="parentFun" :msg1="msg1" :msg2="msg2"  />
    
      </div>
    
    </template>
    
    <script>
    
    import Child from './Child'
    
    export default {
    
      components:{
    
        Child
    
      },
    
      data(){
    
        return {
    
          msg1:'子组件msg1',
    
          msg2:'子组件msg2'
    
        }
    
      },
    
      methods: {
    
        parentFun(val) {
    
          console.log(`父组件方法被调用,获得子组件传值:${val}`)
    
        }
    
      }
    
    }
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
      <div>
    
        <button @click="getParentFun">调用父组件方法</button>
    
      </div>
    
    </template>
    
    <script>
    
    export default {
    
      methods:{
    
        getParentFun(){
    
          this.$listeners.parentFun('我是子组件数据')
    
        }
    
      },
    
      created(){
    
        //获取父组件中所有绑定属性
    
        console.log(this.$attrs)  //{"msg1": "子组件msg1","msg2": "子组件msg2"}
    
        //获取父组件中所有绑定方法    
    
        console.log(this.$listeners) //{parentFun:f}
    
      }
    
    }
    
    </script>
    • 组合式API
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child @parentFun="parentFun" :msg1="msg1" :msg2="msg2" />
    
      </div>
    
    </template>
    
    <script>
    
    import Child from './Child'
    
    import { defineComponent,ref } from "vue";
    
    export default defineComponent({
    
      components: {
    
        Child
    
      },
    
      setup() {
    
        const msg1 = ref('子组件msg1')
    
        const msg2 = ref('子组件msg2')
    
        const parentFun = (val) => {
    
          console.log(`父组件方法被调用,获得子组件传值:${val}`)
    
        }
    
        return {
    
          parentFun,
    
          msg1,
    
          msg2
    
        };
    
      },
    
    });
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
            <button @click="getParentFun">调用父组件方法</button>
    
        </div>
    
    </template>
    
    <script>
    
    import { defineComponent } from "vue";
    
    export default defineComponent({
    
        emits: ['sendMsg'],
    
        setup(props, ctx) {
    
            //获取父组件方法和事件
    
            console.log(ctx.attrs) //Proxy {"msg1": "子组件msg1","msg2": "子组件msg2"}
    
            const getParentFun = () => {
    
                //调用父组件方法
    
                ctx.attrs.onParentFun('我是子组件数据')
    
            }
    
            return {
    
                getParentFun
    
            };
    
        },
    
    });
    
    </script>
    • setup语法糖
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child @parentFun="parentFun" :msg1="msg1" :msg2="msg2" />
    
      </div>
    
    </template>
    
    <script setup>
    
    import Child from './Child'
    
    import { ref } from "vue";
    
    const msg1 = ref('子组件msg1')
    
    const msg2 = ref('子组件msg2')
    
    const parentFun = (val) => {
    
      console.log(`父组件方法被调用,获得子组件传值:${val}`)
    
    }
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
            <button @click="getParentFun">调用父组件方法</button>
    
        </div>
    
    </template>
    
    <script setup>
    
    import { useAttrs } from "vue";
    
     
    
    const attrs = useAttrs()
    
    //获取父组件方法和事件
    
    console.log(attrs) //Proxy {"msg1": "子组件msg1","msg2": "子组件msg2"}
    
    const getParentFun = () => {
    
        //调用父组件方法
    
        attrs.onParentFun('我是子组件数据')
    
    }
    
    </script>

    注意

    Vue3中使用attrs调用父组件方法时,方法前需要加上on;如parentFun->onParentFun

    provide/inject

    provide:是一个对象,或者是一个返回对象的函数。里面包含要给子孙后代属性

    inject:一个字符串数组,或者是一个对象。获取父组件或更高层次的组件provide的值,既在任何后代组件都可以通过inject获得。

    • 选项式API
    //父组件
    
    <script>
    
    import Child from './Child'
    
    export default {
    
      components: {
    
        Child
    
      },
    
      data() {
    
        return {
    
          msg1: '子组件msg1',
    
          msg2: '子组件msg2'
    
        }
    
      },
    
      provide() {
    
        return {
    
          msg1: this.msg1,
    
          msg2: this.msg2
    
        }
    
      }
    
    }
    
    </script>
    
     
    
    //子组件
    
     
    
    <script>
    
    export default {
    
      inject:['msg1','msg2'],
    
      created(){
    
        //获取高层级提供的属性
    
        console.log(this.msg1) //子组件msg1
    
        console.log(this.msg2) //子组件msg2
    
      }
    
    }
    
    </script>
    • 组合式API
    //父组件
    
     
    
    <script>
    
    import Child from './Child'
    
    import { ref, defineComponent,provide } from "vue";
    
    export default defineComponent({
    
      components:{
    
        Child
    
      },
    
      setup() {
    
        const msg1 = ref('子组件msg1')
    
        const msg2 = ref('子组件msg2')
    
        provide("msg1", msg1)
    
        provide("msg2", msg2)
    
        return {
    
           
    
        }
    
      },
    
    });
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
            <button @click="getParentFun">调用父组件方法</button>
    
        </div>
    
    </template>
    
    <script>
    
    import { inject, defineComponent } from "vue";
    
    export default defineComponent({
    
        setup() {
    
            console.log(inject('msg1').value) //子组件msg1
    
            console.log(inject('msg2').value) //子组件msg2
    
        },
    
    });
    
    </script>
    • setup语法糖
    //父组件
    
    <script setup>
    
    import Child from './Child'
    
    import { ref,provide } from "vue";
    
    const msg1 = ref('子组件msg1')
    
    const msg2 = ref('子组件msg2')
    
    provide("msg1",msg1)
    
    provide("msg2",msg2)
    
    </script>
    
     
    
    //子组件
    
     
    
    <script setup>
    
    import { inject } from "vue";
    
    console.log(inject('msg1').value) //子组件msg1
    
    console.log(inject('msg2').value) //子组件msg2
    
    </script>

    说明

    provide/inject一般在深层组件嵌套中使用合适。一般在组件开发中用的居多。

    parent/children

    $parent: 子组件获取父组件Vue实例,可以获取父组件的属性方法等

    $children: 父组件获取子组件Vue实例,是一个数组,是直接儿子的集合,但并不保证子组件的顺序。

    • Vue2
    import Child from './Child'
    
    export default {
    
      components: {
    
        Child
    
      },
    
      created(){
    
        console.log(this.$children) //[Child实例]
    
        console.log(this.$parent)//父组件实例
    
      }
    
    }

    注意父组件获取到的$children并不是响应式的

    expose&ref

    $refs可以直接获取元素属性,同时也可以直接获取子组件实例。

    • 选项式API
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child ref="child" />
    
      </div>
    
    </template>
    
    <script>
    
    import Child from './Child'
    
    export default {
    
      components: {
    
        Child
    
      },
    
      mounted(){
    
        //获取子组件属性
    
        console.log(this.$refs.child.msg) //子组件元素
    
     
    
        //调用子组件方法
    
        this.$refs.child.childFun('父组件信息')
    
      }
    
    }
    
    </script>
    
     
    
    //子组件 
    
     
    
    <template>
    
      <div>
    
        <div></div>
    
      </div>
    
    </template>
    
    <script>
    
    export default {
    
      data(){
    
        return {
    
          msg:'子组件元素'
    
        }
    
      },
    
      methods:{
    
        childFun(val){
    
          console.log(`子组件方法被调用,值${val}`)
    
        }
    
      }
    
    }
    
    </script>
    • 组合式API
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child ref="child" />
    
      </div>
    
    </template>
    
    <script>
    
    import Child from './Child'
    
    import { ref, defineComponent, onMounted } from "vue";
    
    export default defineComponent({
    
      components: {
    
        Child
    
      },
    
     
    
      setup() {
    
        const child = ref() //注意命名需要和template中ref对应
    
        onMounted(() => {
    
          //获取子组件属性
    
          console.log(child.value.msg) //子组件元素
    
     
    
          //调用子组件方法
    
          child.value.childFun('父组件信息')
    
        })
    
        return {
    
          child //必须return出去 否则获取不到实例
    
        }
    
      },
    
    });
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
        </div>
    
    </template>
    
    <script>
    
    import { defineComponent, ref } from "vue";
    
    export default defineComponent({
    
        setup() {
    
            const msg = ref('子组件元素')
    
            const childFun = (val) => {
    
                console.log(`子组件方法被调用,值${val}`)
    
            }
    
            return {
    
                msg,
    
                childFun
    
            }
    
        },
    
    });
    
    </script>
    • setup语法糖
    //父组件
    
     
    
    <template>
    
      <div>
    
        <Child ref="child" />
    
      </div>
    
    </template>
    
    <script setup>
    
    import Child from './Child'
    
    import { ref, onMounted } from "vue";
    
    const child = ref() //注意命名需要和template中ref对应
    
    onMounted(() => {
    
      //获取子组件属性
    
      console.log(child.value.msg) //子组件元素
    
     
    
      //调用子组件方法
    
      child.value.childFun('父组件信息')
    
    })
    
    </script>
    
     
    
    //子组件
    
     
    
    <template>
    
        <div>
    
        </div>
    
    </template>
    
    <script setup>
    
    import { ref,defineExpose } from "vue";
    
    const msg = ref('子组件元素')
    
    const childFun = (val) => {
    
        console.log(`子组件方法被调用,值${val}`)
    
    }
    
    //必须暴露出去父组件才会获取到
    
    defineExpose({
    
        childFun,
    
        msg
    
    })
    
    </script>

    注意

    通过ref获取子组件实例必须在页面挂载完成后才能获取。

    在使用setup语法糖时候,子组件必须元素或方法暴露出去父组件才能获取到

    EventBus/mitt

    兄弟组件通信可以通过一个事件中心EventBus实现,既新建一个Vue实例来进行事件的监听,触发和销毁。

    在Vue3中没有了EventBus兄弟组件通信,但是现在有了一个替代的方案mitt.js,原理还是 EventBus。

    • 选项式API
    //组件1
    
    <template>
    
      <div>
    
        <button @click="sendMsg">传值</button>
    
      </div>
    
    </template>
    
    <script>
    
    import Bus from './bus.js'
    
    export default {
    
      data(){
    
        return {
    
          msg:'子组件元素'
    
        }
    
      },
    
      methods:{
    
        sendMsg(){
    
          Bus.$emit('sendMsg','兄弟的值')
    
        }
    
      }
    
    }
    
    </script>
    
     
    
    //组件2
    
     
    
    <template>
    
      <div>
    
        组件2
    
      </div>
    
    </template>
    
    <script>
    
    import Bus from './bus.js'
    
    export default {
    
      created(){
    
       Bus.$on('sendMsg',(val)=>{
    
        console.log(val);//兄弟的值
    
       })
    
      }
    
    }
    
    </script>
    
     
    
    //bus.js
    
     
    
    import Vue from "vue"
    
    export default new Vue()
    • 组合式API

    首先安装mitt

    npm i mitt -S

    然后像Vue2中bus.js一样新建mitt.js文件。

    mitt.js

    import mitt from 'mitt'
    
    const Mitt = mitt()
    
    export default Mitt
    //组件1
    
    <template>
    
         <button @click="sendMsg">传值</button>
    
    </template>
    
    <script>
    
    import { defineComponent } from "vue";
    
    import Mitt from './mitt.js'
    
    export default defineComponent({
    
        setup() {
    
            const sendMsg = () => {
    
                Mitt.emit('sendMsg','兄弟的值')
    
            }
    
            return {
    
               sendMsg
    
            }
    
        },
    
    });
    
    </script>
    
     
    
    //组件2
    
    <template>
    
      <div>
    
        组件2
    
      </div>
    
    </template>
    
    <script>
    
    import { defineComponent, onUnmounted } from "vue";
    
    import Mitt from './mitt.js'
    
    export default defineComponent({
    
      setup() {
    
        const getMsg = (val) => {
    
          console.log(val);//兄弟的值
    
        }
    
        Mitt.on('sendMsg', getMsg)
    
        onUnmounted(() => {
    
          //组件销毁 移除监听
    
          Mitt.off('sendMsg', getMsg)
    
        })
    
     
    
      },
    
    });
    
    </script>
    • setup语法糖
    //组件1
    
     
    
    <template>
    
        <button @click="sendMsg">传值</button>
    
    </template>
    
    <script setup>
    
    import Mitt from './mitt.js'
    
    const sendMsg = () => {
    
        Mitt.emit('sendMsg', '兄弟的值')
    
    }
    
    </script>
    
     
    
    //组件2
    
     
    
    <template>
    
      <div>
    
        组件2
    
      </div>
    
    </template>
    
    <script setup>
    
    import { onUnmounted } from "vue";
    
    import Mitt from './mitt.js'
    
    const getMsg = (val) => {
    
      console.log(val);//兄弟的值
    
    }
    
    Mitt.on('sendMsg', getMsg)
    
    onUnmounted(() => {
    
      //组件销毁 移除监听
    
      Mitt.off('sendMsg', getMsg)
    
    })
    
    </script>

    写在最后

    其实组件还可以借助Vuex或者Pinia状态管理工具进行通信(但是组件之间的通信一般不建议这样做,因为这样就会出现组件不能复用的问题)。

    组件间怎么通信?盘点Vue组件通信方式
    微信扫码分享

    0

    0

    分享
  • 会员

  • 上一篇: html5中px和em的区别是什么

    下一篇: 社恐就是不爱与人交往?它其实是一种病!

    还没有评论,赶紧来抢沙发吧!

    韭菜粉丝鸡蛋饼(韭菜粉丝鸡蛋饼的做法窍门)

    1、韭菜洗净切碎,再倒入少许植物油拌匀备用。 2、粉丝泡软后用开水焯水1分钟,捞出过凉切小段,再倒入少许植物油拌匀备用。 …

    知了猴的副作用(知了猴吃了有什么作用)

    知了猴也叫金蝉,不同的地方叫法不一,包括节老龟、爬衩黑蚱蝉、知了龟、爬叉等等,每年的六七月份,雨后的傍晚和晚上,大树下、 …

    红糖煮鸡蛋来月经能吃吗 来月经红糖煮鸡蛋可以吃吗

    我们都知道鸡蛋含有丰富的营养价值,那红糖煮鸡蛋有什么营养价值呢?今天小编给大家介绍一下红糖煮鸡蛋来月经能吃吗?红糖煮鸡蛋 …

    这样回复你微信的人,请深交,常联系!

    在这个繁华的世界上,我们会遇见无数个灵魂。 有的如同夏日的微风,轻轻拂过我们的脸颊,便消失在人群中; 有的却能陪伴我们走 …

    笔记本电脑亮度怎么调 笔记本电脑亮度怎么调节?

    笔记本电脑亮度怎么调节? 打开笔记本电脑,点击左下角的“开始”按钮,进入开始菜单栏界面。 在开始菜单栏的左边,找到设置按 …

    喝牛骨汤有什么好处 怀孕喝牛骨汤有什么好处

    牛骨汤是一种非常好喝营养滋补的汤肴,特别适合身体虚弱需要补充营养的人群食用,常喝这道汤品能为身体带来以下好处,想喝的朋友 …

    鱼香肉丝的经典做法(鱼香肉丝的经典做法大全)

    1、猪里脊切长约8cm,粗0.3cm的二粗丝,加盐、料酒搅至上劲后放水淀粉搅匀,封油备用。 2、青笋、木耳切细丝。并将青 …

    西梅通便效果好吗 西梅有通便的功效吗

    西梅的果实所富含的琥珀酸、苹果酸、枸椽酸,可以起到清热生津、安眠、降压,通便的作用,那么西梅通便效果好吗? 西梅通便效果 …

    刀鱼如何清理内脏(刀鱼如何清理内脏图解)

    刀鱼是一种肉质十分细腻的鱼类,但是最近几年刀鱼的价格也是比较贵的,那刀鱼应该如何清理内脏呢? 刀鱼如何清理内脏 从鱼鳃处 …

    豆沙馅馒头怎么做又软又好吃 豆沙馅馒头怎么做又软又好吃窍门

    1、红豆用冷水泡1天,高压锅倒入开水,放入红豆,水刚刚没过豆子。 2、盖上盖子,压10分钟。 3、煮好后倒入一碗白糖。 …

    黑米黑豆粥的功效与作用 黑米黑豆粥的功效与作用

    黑米和黑豆都是粗粮,如果将两者一起煮粥食用的话能起到怎样的功效与作用呢?黑米黑豆粥的食用方式是怎样的,在食用的时候又有哪 …

    吃橘子有什么好处和坏处(晚上吃橘子有什么好处和坏处)

    秋冬季节,是橘子成熟上市的季节。橘子味酸甜,营养也很丰富,食用对身体十分有益。下面我们就来看看吃橘子有什么好处和坏处吧。 …

    保儿宁颗粒可以治疗积食吗?(小孩积食内热可以吃醒脾养儿颗粒吗)

    小儿出现积食如果同时伴有大便干燥、高热等症状,可以在医生指导下吃小儿清热宁颗粒。如果小儿只是单纯积食,没有上述症状,则不 …

    元宵节不能关灯吗

    元宵节能关灯。在中国的传统观念里,认为元宵节当晚,家里的灯一定要全部点亮,包括卫生间、走道、围墙等,只要有灯的地方都要全 …

    发酵黄豆酱的做法

    黄豆酱是调味酱,黄豆酱美味好吃,其实发酵黄豆酱的做法不难,我们完全可以自制。传统豆瓣酱它是大豆和面粉为主要生产原料,由各 …

    元宵节海报文案最新 元宵节唯美文案

    元宵节海报文案 1、元宵佳节赏明月,万户千家闹团圆;花灯遍照万家春,灯笼高挂梦想圆;口含元宵享甜蜜,欢聚一堂把笑延;温馨 …

    松茸炖多久合适 松茸一般炖多久

    松茸又称合菌、台菌,是一种珍贵的食用野生菌,它的味道鲜美,营养丰富,可以炭烤、油煎,也可以炖汤喝,那么松茸炖多久合适呢? …

    大闸蟹如何保存才不会死(大闸蟹能保存多久不死)

    1、螃蟹的活动能力还是比较强的,许多商家会将螃蟹绑起来,就是为了降低螃蟹活动消耗的能量,买回家后如果不及时吃掉,可以将螃 …

    三叠纪化石种类和特点

    三叠纪化石主要是实体化石和遗迹化石为主,主要是当时的生物避开了环境的变化而形成的,它主要位于二叠纪和侏罗纪之间,也是中生 …

    吃米蕉会不会上火(吃米蕉会不会上火呢)

    香蕉相信很多人都不陌生,而除了香蕉之外还有一种蕉,那就是米蕉,那么吃米蕉会不会上火呢?米蕉吃多了又会怎么样呢?下面带你一 …