如果可用,检查子组件中的道具值

Posted

技术标签:

【中文标题】如果可用,检查子组件中的道具值【英文标题】:check props value in child component if available 【发布时间】:2021-12-02 22:55:29 【问题描述】:

我目前正在使用BootstrapVue

我的 parent.vue 中有一个 b-dropdown,我可以在其中选择 JSON 文件的对象并将其转换为数组,因为我需要这个 json 对象的长度。 这很好用!

我的问题是我需要检查我的 parent.vue 是否选择了某些东西 - 所以如果 this.arrayLength 高于 0 (直到此时它运行良好!) 。如果这是真的,它应该在我的child.vue 中使用并显示addElementsNotClickable(),其中不能添加任何元素(输入的计数等于数组的长度) - 否则它应该使用并显示我的按钮addElement(),其中多个可以手动添加元素。

但如果arrayLenght > 0... 并且我不知道在第二个按钮上使用什么,例如@change(??),我无法签入我的 child.vue。我能解决吗?

非常感谢!我已经尽量详细了!

附加信息:我没有收到错误代码!!

我的父母.vue:

methods: 
  inputedValue(input, index) 
    var array = [];
    const item= this.json.find((i) => i.Number === input);
    for (let key in item.ID) 
      array.push(item.ID[key]);
    
    if(array.length > 0) 
      this.getIndex = index;
      this.getDataArray = array;
      this.getLengthArray = array.length;
    
  

我的 child.vue(模板)

<div class="mt-4 mb-5 ml-3 mr-3">
  <b-button v-if="!hide" @click="addElement" variant="block">Add Element</b-button>
  <b-button v-if="hide" @???="addElementNotClickable" variant="block">Not clickable ! </b-button>
</div>

我的 child.vue(脚本)

methods: 
  addElementsNotClickable() 
      for(let i = 1; i < this.arrayLength; i++) 
        this.inputs.push()
      
  ,

  addElement() 
      this.inputs.push()   
  ,


data() 
  return 
    inputs: []
    arrayLength: this.getLengthArray,
    arrayIndex: this.getIndex,
    hide: false,


props: [
    "getLengthArray",
    "getIndex"
    ],

【问题讨论】:

所以看看我们是否理解。如果arrayIndex &gt; 0,您想为您的NOT CLICKABLE div 添加一个侦听器?这个问题似乎不太清楚 这是我需要的第一件事——但更大的问题是如何检查我的 Child.vue if array.length > 0 【参考方案1】:

您误解了组件在 Vue 中的工作方式。简而言之,您可以通过以下方式理解它们:

父母向下发送道具,孩子向上发送事件

您正在寻找的是,每当您的arrayLength 更新时,您都会向父级发送一个事件。然后,处理该事件是父级的责任。在这种情况下,父级将接收事件并存储数组的长度。

父.vue

<template>
  <div> 
    <child @arrayLenght:update="onArrayLenghtUpdate"/>
  </div>
</template>

<script>
export default 
  data: () => 
    arrayLength: 0,
  ,
  methods: 
    onArrayLenghtUpdate(length) 
      this.arrayLength = length;
    
  

</script>

Child.vue

<template>  ... </template>
<script>
export default 
  data: () => (
    arrayLength: 0,
  ),
  watch: 
    arrayLenghth: function (newLenght) 
       this.$emit('arrayLenght:update', newLenght);
    
  

</script>

如果您的ParentChild 没有高度耦合在一起,这是标准方法并且非常有用。如果它们相互依赖(您不会在应用程序的其他任何地方使用Child.vue。就像Parent.vue 的直接子级一样),那么您可以使用inject/provide 方法。这种方法超出了这个答案的范围,请随时阅读article on it

【讨论】:

我了解components 的工作原理。但是我需要从我的父母那里发送一个道具,因为他们我正在选择我的option - 在我的孩子中,如果选择了某些东西,我需要检查每个元素。所以我的父母很可能就像一个导航栏,而我的孩子就是这个导航栏中的一切。 感谢您的帮助!

以上是关于如果可用,检查子组件中的道具值的主要内容,如果未能解决你的问题,请参考以下文章

如何将道具传递给vue中的子组件

如何将从父组件传递的道具推送到子组件中的数组?

如何将道具传递给vue中的兄弟组件和子组件

Vue.js。子组件中的变异道具不会触发警告。想知道为啥

在选择选项更改时将子组件中的道具传递给父组件

子视图组件将道具传递给Vue中的父布局