vue传值方式以及会话储存数据以及新slot的使用

  • 由于很长时间没有使用vue了,版本一直在更新,正好现在有时间再整理一下语法使用。
  • 下面直接包括(子传父,父传子,slot,sessionStorage(会话数据储存)),直接给上代码
  • 父组件
<template>
    <div class="about">
        <h1>This is an about page</h1>
        <h3>{{childValue}}</h3>
        <!--  :parentsData父传子   @childToParentsData:子传父 -->
        <ChildAbout :parentsData="parentsData" @childToParentsData="childToParentsData">
            <template v-slot:old>
                <div>我是旧的</div>
            </template>
            <!--           mySlot是直接接收数据自定义的名字 -->
            <!--            <template v-slot:new="slotData">-->
            <!--            {{slotData.slotData}}-->
            <template v-slot:new="{slotData}">
                {{slotData}}
            </template>
<!--            简用方式#demoNew 也就是v-slot:demoNew(这个是插槽名) demoData是数据加了{demoData}的话就是传入的值-->
            <template #demoNew="{demoData}">
                {{demoData}}
            </template>
        </ChildAbout>
    </div>
</template>
<script>
  // 引入组件
  import ChildAbout from './childAbout'
  // 默认导出组件
  export default {
    // 组件名
    name: 'about',
    // 注册组件
    components: {
      ChildAbout
    },
    // 存放 数据
    data: function () {
      return {
        parentsData: '我是父组件的数据',
        childValue: '', // 此时就是子传父的值
      }
    },
    // 存放 方法
    methods: {
      // 也需要接收子传过来的数据 子传父接收数据
      childToParentsData(childValue) {
        // childValue就是子组件传过来的值 对其赋值到当前页面
        this.childValue = childValue
      }
    },
    // 存放 过滤器
    filters: {},
    // 自定义 私有指令
    directives: {},
    // 存放 子组件
    // 注意: 组件中的 所有 props 中的数据,都是通过 父组件传递给子组件的
    // props 中的数据,都是只读的,无法重新赋值
    // props: [], // 把父组件传递过来的 parentmsg 属性,先在 props 数组中,定义一下,这样,才能使用这个数据
    /*  生命周期函数  */
    // 创建期间
    beforeCreate() {
      // console.log('beforeCreate:刚刚new Vue()之后,这个时候,数据还没有挂载呢,只是一个空壳')
    },
    // 一般页面加载时请求后台数据(axios)
    created() {
      // console.log('created:这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数')
      // console.log('在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取')
      // console.log('接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染')
    },
    beforeMount() {
      // console.log('beforeMount:虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated')
      // console.log('在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取')
      // console.log('接下来开始render,渲染出真实dom')
    },

    mounted() {
      // console.log('mounted:此时,组件已经出现在页面中,数据、真实dom都已经处理好了,事件都已经挂载好了')
      // console.log('可以在这里操作真实dom等事情...')
    },
    // 运行期间(也就是事件过后改变数据等等)
    beforeUpdate() {
      //这里不能更改数据,否则会陷入死循环
      // console.log('beforeUpdate:重新渲染之前触发')
      // console.log('然后vue的虚拟dom机制会重新构建虚拟dom与上一次的虚拟dom树利用diff算法进行对比之后重新渲染')
    },
    // 数据更新
    updated() {
      //这里不能更改数据,否则会陷入死循环
      // console.log('updated:数据已经更改完成,dom也重新render完成')
    },
    // 销毁时期
    beforeDestroy() {
      // console.log('beforeDestory:销毁前执行($destroy方法被调用的时候就会执行),一般在这里善后:清除计时器、清除非指令绑定的事件等等...')
    },

    destroyed() {
      // console.log('destroyed:组件的数据绑定、监听...都去掉了,只剩下dom空壳,这里也可以善后')
    }

  }
</script>

<!--scoped是在这个组件才能使用的样式-->
<style scoped>
</style>

  • 子组件(child)
<template>
  <div id="main">
    {{cilldData}}
    ----------我是子组件
    {{parentsData}}
    <button @click="childToParentsData">子传父的值</button>
    <slot name="old">我是默认slot的内容</slot>
<!--    包括具名插槽 绑定的动态的值-->
    <slot name="new" :slotData="slotData">
<!--      {{slotData}}-->
    </slot>
    <slot name="demoNew" :demoData="demoData"></slot>
  </div>
</template>

<script>
export default {
  name: 'cilldAbout',
  // 存放 数据
  // 这个 prop 用来传递一个初始值;这个子组件接下来希望将其作为一个本地的 prop 数据来使用。
  // 在这种情况下,最好定义一个本地的 data 属性并将这个 prop 用作其初始值:
  props:{   // 接收了父组件传过来的值
    parentsData:String, // 传的数据为字符串,不是字符串就报错
  },
  data: function () {
    return {
      demoData:'我是demoData',
      slotData:'我是slot里面的数据',
      cilldData:'我是子组件的数据',
      parentsDataMe:this.parentsData,  //本地的 data 属性并将这个 prop 用作其初始值
    }
  },
  // 存放 方法
  methods: {
    // 父传子数据 通过@click绑定事件传值
    childToParentsData(){
      // 会话储存数据(getItem(获取数据))(setItem设置数据)
      // this.slotData=sessionStorage.getItem('key')
      // sessionStorage.setItem('key', this.demoData)
       this.$emit('childToParentsData',this.cilldData)
    },
  },
}
</script>

<style scoped>
</style>

  • 其实做项目会用到vuex(状态管理器),个人理解就是全局变量储存的数据各个组件都可以用(用于组件嵌套比较深以及兄弟组件之间的传值)。

总结:很多东西不用真的容易忘,代码这个东西多看多敲防止忘了(毕竟学得东西太多了)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值