前端框架Vue(8)——子父组件的传参通信

本文介绍Vue.js中父子组件间的数据传递方法,包括子组件通过$emit向父组件发送数据及父组件通过props向子组件传递数据的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  父子间的通信传值是 vue 中的一个重要的内容和掌握点。

  *vue2.0 推荐使用 vuex,全局进行状态管理。(后面再讲)

  首先讲一下遇到的 需求背景:
这里写图片描述

解释一下:
  组件之间的关系:

 <div id="app">
    <loginPage v-on:showState="changeState" v-if="loginShow" :fromParent="fromParent"></loginPage>
    <div class="web-content" v-if="webShow">
      <phHeader :headerUserName="headerUserName"></phHeader>
      <div>
        <router-view></router-view>
      </div>
      <phFooter></phFooter>
    </div>    
  </div>

这里写图片描述


1、子组件 login 传参数给父组件 app.vue

$emit

用法:vm.$emit( event, […args] ),触发当前实例上的事件。

子组件中代码

submitForm:function(formName){
    //与父组件通信传值
    this.$emit('showState', [this.loginShow,this.formName.user])
}

submitForm 是一个点击事件, showState 是一个方法,后边是多个参数写法。

父组件中代码

首先需要在 子组件中绑定 showState 事件,前一个 showState 是在子组件定义的,后面的 changeState 是新定义的方法。

 <loginPage v-on:showState="changeState" v-if="loginShow" :fromParent="fromParent"></loginPage>
changeState:function(data){
      //console.log(data)
      if(data[0] === false){
        console.log('执行')
        this.webShow = true;//显示web应用内容
        this.loginShow = false;//隐藏login组件
        this.headerUserName = data[1];//赋值headerUserName
      }
    }

然后就能在方法中获得子组件传来的参数:
data:[false, "allen"]0: false1: "allen"length: 2__proto__: Array(0)

2、父组件 app.vue 传参数给子组件 ph-Header

props

父组件中代码:

引入在父组件中的 ph-Header 子组件需要绑定 headerUserName,前一个 headerUserName 是子组件中定义的。后一个才是父组件中的参数。

<phHeader :headerUserName="headerUserName"></phHeader>
export default {
  name: 'app',
  data () {
    return {
      loginShow: true,
      webShow: false,
      fromParent:'——来自父组件',
      headerUserName: '用户名'
    }
  },
  components:{
    phHeader,
    phFooter,
    loginPage
  },
  methods:{
    changeState:function(data){
      console.log(data)
      if(data[0] === false){
        console.log('执行')
        this.webShow = true;//显示web应用内容
        this.loginShow = false;//隐藏login组件
        this.headerUserName = data[1];//赋值headerUserName
      }
    }
  }
}

子组件中代码

子组件中需要接收 headerUserName

    export default {
        name: '',
        data () {
            return {

            }
        },
        props:[
            'headerUserName'
        ]
    }

关于父子组件的传参通信,有需要的话这边有一个比较完整的项目放在我的github上:https://github.com/AllenChinese/Go-Vue/tree/master/vue-pinghu

希望对那么可爱,还来看我博客的你 有些许的帮助!

### 若依框架统计页面的前端实现 若依框架是一个基于Spring Boot和Vue.js开发的企业级快速开发平台,提供了丰富的功能模块和支持。对于统计页面的前端实现,通常会涉及图表展示、数据交互等功能。以下是结合已有引用内容和专业知识的回答。 #### 1. 使用ECharts进行图表展示 在若依框架中,统计页面的前端部分可以借助ECharts来完成复杂的图表绘制。ECharts是由百度开源的一个强大的可视化库,能够满足大部分的数据可视化需求[^3]。 以下是一个简单的ECharts折线图示例: ```javascript // 初始化 ECharts 实例 var myChart = echarts.init(document.getElementById('main')); // 指定图表的配置项和数据 var option = { title: { text: '统计页面示例' }, tooltip: {}, legend: { data:['销量'] }, xAxis: { type: 'category', data: ['周一','周二','周三','周四','周五','周六','周日'] }, yAxis: { type: 'value' }, series: [{ name: '销量', type: 'line', data: [120, 200, 150, 80, 70, 110, 130] }] }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); ``` 此代码展示了如何在一个`div`容器中初始化并渲染一个折线图。 --- #### 2. 主页面与内嵌页的交互设计 根据引用描述,在主页面可以通过按钮触发接口调用,并将返回的数据递给内嵌页中的曲线组件[^1]。这种场景下,推荐使用父组件向子组件传参的方式实现数据共享。 假设主页面有一个按钮用于获取统计数据并通过表单赋给内嵌页,则其实现逻辑如下: ##### Vue.js 父组件 (MainPage.vue) ```vue <template> <div> <button @click="fetchData">加载数据</button> <iframe id="chartIframe" src="/path/to/child/page"></iframe> </div> </template> <script> export default { methods: { fetchData() { this.$axios.get('/api/statistics') .then(response => { const chartFrame = document.getElementById('chartIframe').contentWindow; chartFrame.postMessage({ data: response.data }, '*'); }) .catch(error => console.error(error)); } } } </script> ``` ##### 子组件 (ChildPage.vue) 接收来自父组件的消息并更新图表: ```javascript window.addEventListener('message', function(event) { var receivedData = event.data; updateChart(receivedData); // 调用函数更新图表 }); function updateChart(data) { var myChart = echarts.getInstanceByDom(document.getElementById('main')); if (!myChart) { myChart = echarts.init(document.getElementById('main')); } myChart.setOption({ series: [{ data }] // 动态设置数据 }); } ``` 上述代码实现了父子页面之间的通信机制,其中`postMessage()`方法被用来安全地跨域输消息。 --- #### 3. Admin.NET框架下的扩展思路 虽然引用未提及具体技术栈,但从Admin.NET框架的角度来看,其支持通过Razor视图引擎动态加载局部视图[^2]。这为构建复杂统计页面提供了一种替代方案——即利用服务器端渲染生成HTML片段后再注入到客户端DOM树中。 例如,在Controller层定义好API接口后,可以在View模板里引入这些资源作为辅助工具栏或者图形区域的一部分。 --- #### 总结 综上所述,若依框架内的统计页面可以从以下几个方面入手:一是采用成熟的第三方库如ECharts制作精美的视觉效果;二是合理规划前后端分工协作流程,确保高效稳定运行环境;三是灵活运用现代Web开发技巧解决实际业务痛点问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值