vue组件传值的方法

vue组件传值的方法

父传子

父组件
首先在父组件定义好数据,将子组件导入到父组件中。父组件在调用子组件的地方使用v-bind指令定义一个属性,并传值在该属性中

<div class="parentOne">
  <children-item 
    :content="item" 
    v-for="item in list" 
    :key="item.id"
  >
  </children-item>
</div>
 <children-item>是导入进来的子组件,content是被v-bind指令定义的属性

子组件
在子组件中要使用关键词props接收父组件传递过来的属性,然后可以直接使用


<template>
  <div class="ChildrenOne">
    <ul>
      <li v-for="childItem in content">{{childItem}}</li>
      <li>{{message}}</li>
    </ul>
  </div>
</template>
<script>
  export default {
    name: 'ChildrenOne',
    props: ["content"],
    data() {
      return {
        message: this.content.id
      }
    }
  }
</script>

子传父

首先,需要触发子组件的某个事件,由该事件触发的方法中又使用关键方法$emit()发布了一个自定义的事件,并且能够传入相关的参数。子组件所要的事情就只有这么多

ChildrenOnclick() {
  // 发布自定义事件
  this.$emit("delete", this.index)
}

当ChildrenOnclick方法被触发的时候,自定义了一个delete事件,并传入了相关参数this.index

<children-item 
   :content="item" 
   :index="index" 
   v-for="(item, index) in list" 
   :key="item.id" 
   @delete="ParentClick"
  >
</children-item>

@delete是子组件自定义的事件,当该事件在子组件被触发的时候,那么ParentClick这个方法就会被执行

兄弟传参

在由vue-cli搭建起来的项目中的main.js创建一个事件总线,也就是中转站,作为通信的桥梁。

// 建立中转站,实现组件与组件之间的传值
let bus = new Vue()
Vue.prototype.bus = bus

在发送方组件里面使用关键字$emit()定义一个自定义事件,并传入参数。

methods: {
  btnMessage() {
    this.bus.$emit("ReceiveMessage", this.message)
  }
}

接收方组件,只要使用this.bus.$on关键字就能够监听到发送方触发的事件,并在内部通过一个函数接收传入进来的参数

<template>
  <div class="brotherOne">
    <h5>接收方组件,下面是接收内容</h5>
    <span>{{name}}</span>
  </div>
</template>
<script>
  export default {
    name: 'BrotherTwo',
    data() {
      return {
        name: "1111"
      }
    },
    mounted() {
      let self = this;
      this.bus.$on("ReceiveMessage", function(item) {
        self.name = item;
      })
    }
  }
</script>

vuex传值

export default new Vuex.Store({
  state: {
    data:'',// state 中存放的就是全局共享的数据
  },
  mutations: {},
  actions: {},
  getters:{},
})

state提供唯一的公共数据源,所有共享的数据都统一放到store的state中进行存储
组件访问state中数据的第一种方式:

this.$store.state.数据名

组件访问state中数据的第二种方式:

//1。从vuex中按需导入mapState函数
import { mapState } from 'vuex'

通过导入的mapState函数,将当前组件需要的数据映射为当前组件的computed计算属性:

computed:{
	...mapState{['data']}
}

$parent

<div id="app">
    A{{msg}}
    <my-button :msg="msg"></my-button>
  </div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.7/vue.common.dev.js"></script>

  <script>
    let vm = new Vue({
      el: '#app',
      data: {
        msg: '100'
      },
      mounted () {
        console.log(this.$parent, '父') // 没有父组件
        console.log(this.$children, '子') // 99组件
      },
      components: {
        'MyButton': {
          template: `<div>B<my-radio></my-radio></div>`,
          data () {
            return {
              msg: '99'
            }
          },
          mounted () {
            console.log(this.$parent, '父') // 100组件
            console.log(this.$children, '子') // 88组件
          },
          components: {
            'MyRadio': {
              template: `<div>C</div>`,
              data () {
                return {
                  msg: '88'
                }
              },
            },
          },
        },
      }
    })
  </script>

$children 介绍:
当前实例的直接子组件。需要注意 $children 并不保证顺序,也不是响应式的。如果你发现自己正在尝试使用 $children 来进行数据绑定,考虑使用一个数组配合 v-for 来生成子组件,并且使用 Array 作为真正的来源。

$parent 介绍:
当前组件树的根 Vue 实例。如果当前实例没有父实例,此实例将会是其自己。

<div id="app">
    A{{msg}}
    <my-button :msg="msg"></my-button>
  </div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.7/vue.common.dev.js"></script>

  <script>
    let vm = new Vue({
      el: '#app',
      data: {
        msg: '100'
      },
      methods: {
        handleClick () {
          console.log('点击事件')
          this.$children.forEach(child => {
            child.todo()
          })
        }
      },
      components: {
        'MyButton': {
          template: `<div @click="$parent.handleClick">B</div>`,
          data () {
            return {
              msg: '99'
            }
          },
          methods: {
            todo () {
              console.log('todo事件')
            }
          },
        },
      }
    })
  </script>

$children 是一个数组,是直接儿子的集合,关于具体是第几个儿子,那么儿子里面有个 _uid 属性,可以知道他是第几个元素,是元素的唯一标识符,根据这个属性,我们可以进行其他的操作

ref传值

 <!-- 登录弹框显示 -->
    <LodinDialog ref="dia"></LodinDialog>
    //LodinDialog 这是全局组件
  methods: {
   //登录
    useLodin() {
      this.$refs.dia.showDia()
    },
  }
  //通过给全局组件LodinDialog 定义ref 在methods中通过$refs直接获取到组件的所有属性即可调用全局组件LodinDialog中定义好的showDia()方法
基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
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、付费专栏及课程。

余额充值