0
点赞
收藏
分享

微信扫一扫

前端,子传父--自用

阎小妍 2022-02-07 阅读 56

涉及功能:$emit , @

在components文件夹中新建两个文件,分别为cld10.vue父组件,cld11.vue子组件

在router文件夹index.js文件中新增两个文件在首页的点击跳转按钮

 {
            name:'cld10第10页',
            // 既是地址也是参数
            path:'/cld10/:dyx',
            component:()=>import('../components/cld10')
        },
        {
            name:'cld11第11页',
            // 既是地址也是参数
            path:'/cld11/:dyx',
            component:()=>import('../components/cld11')
        },

在首页helloworld中添加按钮和点击跳转事件

    <button @click="jump10">跳转第10页</button>
    <button @click="jump11">跳转第11页</button>


           jump10(){
      this.$router.push({path:'/cld10'+'/'+123})
    },
            jump11(){
      this.$router.push({path:'/cld11'+'/'+123})
    },

既然cld10.vue是父组件,那么就需要把cld11.vue导入到cld10.vue,形成组件

import cld11 from './cld11.vue'

同时配置组件

components:{

        cld11,

    }

然后在template中使用 <cld-11></cld-11>

在cld11组件中使用“@”符号

 <cld-11 @aa='chuan'></cld-11>

然后配置chuan这一方法,同时为了配置初始数据使用了data

    methods:{
        chuan(val){
            this.zichuanfu=val
        },
    },
    data(){
        return{
            zichuanfu:'第十页数据'
        }
    },

然后为了配置aa这个“事件”,去cld11.vue中配置信息

<template>
  <div>
      <h1>第十一页</h1>
      <button @click="cli">子传父</button>
  </div>
</template>

<script>
export default {
    methods:{
        cli(){
            this.$emit('aa','第十一页方法')
        }
    }

}
</script>

<style>

</style>

为了显示两个页面数据传递产生的变化,在cld10.vue中添加

      <h1>{{zichuanfu}}</h1>

保存vscode代码,然后去浏览器中查看

跳转父页面第十页

点击按钮“子传父”

 

 首先这是第十页的页面,分为三部分

第一部分,是第十页原始的信息

第二部分为第十一页原始信息,但是导入了第十页,所以第十页中出现了

第三部分,是动态数据,原始数据是父页面cld10.vue中data中的,然后点击“子传父”从子页面第十一页中获取的.

子传父完整流程介绍完毕

具体代码如下:(存在冗余代码)

index.js

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
//import
import hi from '../components/HelloWorld.vue'
// import cld1 from '../components/cld1.vue'
//export default 就是导出,用模块化导出
export default new Router({
    mode:'history',
    routes:[
        {
            name:'首页',
            path:'/',
            component:hi
        },
        {
            name:'cld1第一页',
            path:'/cld1',
            component:()=>import('../components/cld1')
        },
        {
            name:'cld2第2页',
            path:'/cld2/:dyx/:jk',
            component:()=>import('../components/cld2')
        },
        //路由懒加载
        {
            name:'cld3第3页',
            path:'/cld3/:dyx/:jk',
            component:()=>import('../components/cld3')
        },
        {
            name:'cld4第4页',
            path:'/cld4/:dyx/',
            component:()=>import('../components/cld4')
        },
        {
            name:'cld5第5页',
            // 既是地址也是参数
            path:'/cld5/:dyx/:jk',
            component:()=>import('../components/cld5')
        },
        {
            name:'cld6第6页',
            // 既是地址也是参数
            path:'/cld6/:dyx',
            component:()=>import('../components/cld6')
        },
        {
            name:'cld6第7页',
            // 既是地址也是参数
            path:'/cld7/:dyx',
            component:()=>import('../components/cld7')
        },
        {
            name:'cld6第8页',
            // 既是地址也是参数
            path:'/cld8/:dyx',
            component:()=>import('../components/cld8')
        },
        {
            name:'cld10第10页',
            // 既是地址也是参数
            path:'/cld10/:dyx',
            component:()=>import('../components/cld10')
        },
        {
            name:'cld11第11页',
            // 既是地址也是参数
            path:'/cld11/:dyx',
            component:()=>import('../components/cld11')
        },
    ]
})

 

 HelloWorld.vue

<template>
  <div class="hello">
    <h1>首页</h1>
    <button @click="jump1">跳转到第1页</button>
    <button @click="jump2">跳转第二页</button>
    <button @click="jump3">跳转第三页</button>
    <button @click="jump4">跳转第四页</button>
    <button @click="jump5">跳转第5页</button>
    <button @click="jump6">跳转第6页</button>
    <button @click="jump7">跳转第7页</button>
    <button @click="jump8">跳转第8页</button>
    <br>
    <button @click="jump10">跳转第10页</button>
    <button @click="jump11">跳转第11页</button>

    
  </div>
</template>

<script>
export default {
  name:'HelloWorld',
  data(){
    return{
      flag:567,
      session:3,
      local:4,
      usually:'d3',
      gongsi:5,
      show:6,
    }
  },
  methods:{
    jump1(){
      this.$router.push({path:'/cld1'})
    },
    jump2(){
     this.$router.push({name:'cld2第2页',query:{zzz:this.flag,yyy:'333'}}),
      sessionStorage.setItem('zsession',this.session),
      localStorage.setItem('zlocal',this.local),
      localStorage.removeItem('zlocal'),
      //{path:},这些信息可以省略
      this.$router.push('/cld2/d3/'+5.1)
     
    },
    jump3(){
      //this.$router.push({path:'/cld3'}),
      //{path:},这些信息可以省略
      this.$router.push('/cld3/'+this.usually+'/'+123)
    },
    jump4(){
      this.$router.push({path:'/cld4'+'/'+123})
    },
    jump5(){
      this.$router.push({path:'/cld5/'+this.gongsi+'/'+123})
    },
    jump6(){
      this.$router.push('/cld6/'+this.show)
    },
        jump7(){
      this.$router.push({path:'/cld7'+'/'+123})
    },
        jump8(){
      this.$router.push({path:'/cld8'+'/'+123})
    },
            jump10(){
      this.$router.push({path:'/cld10'+'/'+123})
    },
            jump11(){
      this.$router.push({path:'/cld11'+'/'+123})
    },
  }
 
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

cld10.vue

<template>
  <div>
      <h1>第十页</h1>
      <cld-11 @aa='chuan'></cld-11>
      <h1>{{zichuanfu}}</h1>
  </div>
</template>

<script>
import cld11 from './cld11.vue'
export default {
    components:{
        cld11,
    },
    methods:{
        chuan(val){
            this.zichuanfu=val
        },
    },
    data(){
        return{
            zichuanfu:'第十页数据'
        }
    },

}
</script>

<style>

</style>

cld11.vue

<template>
  <div>
      <h1>第十一页</h1>
      <button @click="cli">子传父</button>
  </div>
</template>

<script>
export default {
    methods:{
        cli(){
            this.$emit('aa','第十一页方法')
        }
    }

}
</script>

<style>

</style>
举报

相关推荐

0 条评论