如何将数据从 Vue 实例传递给嵌套组件

Posted

技术标签:

【中文标题】如何将数据从 Vue 实例传递给嵌套组件【英文标题】:How can I pass data to nested components from Vue instance 【发布时间】:2018-02-02 12:34:48 【问题描述】:

我通过 AJAX 从 Vue 实例获取数据,我需要将该数据传递给组件。我现在正在学习 Vue.js 的工作原理,但我发现文档有点零碎......

这大概是我的代码:

<!DOCTYPE html>
<html lang="en">
    <meta charset="UTF-8">
    <title>mysite</title>
</head>
<body>

<div id="app">
    <parent-component></parent-component>
</div>

<template id="parent-component-template">
    <div id="the-template">
        <div class="the-list">
            <span is="sector-item" v-for="item in sectors" :sector="item"></span>
        </div>
        <button>Button</button>
    </div>
</template>

<template id="sector-item-template">
    <span>
         sector.name 
    </span>
</template>

<!-- Vue.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.js"></script>

<script>
    Vue.component('parent-component', 
        template: '#parent-component-template'
    );

    Vue.component('sector-item', 
        props: ['sector'],
        template: '#sector-item-template'  
    );

    let app = new Vue(
        el: '#app',
        data: 
            sectors: [
                'id': 1,
                'name': 'Industry'
            ]
        
    );
</script>

</body>
</html>

我收到以下错误:

[Vue warn]: Property or method "sectors" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.

我在哪里犯错了?

【问题讨论】:

您需要将sectors 作为道具传递给您的父组件 vuejs.org/v2/guide/components.html#Props 【参考方案1】:

我认为您的代码不完整。我试图在下面的 sn-p 中模拟你想要做的事情:

Vue.component('parent-component', 
  props: ['sectors']
);

Vue.component('child-component', 
  props: ['item']
);

new Vue(
  el: '#app',
  data: 
    sectors: [
      
        'id': 1,
        'name': 'Industry'
      ,
      
        'id': 2,
        'name': 'Education'
      
    ]
  
);
.the-list > div 
  padding: 5px;
  border: 1px solid gray;
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.js"></script>

<div id="app">
  <parent-component :sectors="sectors" inline-template>
    
    <div class="the-list">
      <child-component :item="sector" :key="sector.id" v-for="sector in sectors" inline-template>
        <div>
          <span v-text="item.name"></span>
          <button>Button</button>
        </div>
      </child-component>
    </div>
    
  </parent-component>
</div>

Vue 实例拥有属性sectors,我将此属性作为prop 传递给&lt;parent-component&gt;

现在&lt;parent-component&gt; 有一个名为sectors(它可能是另一个名称)的道具,它从主Vue 实例接收sectors 的值。我使用v-for 遍历了 parent-component prop 的所有项,将数组的每个项传递给&lt;child-component&gt;

&lt;child-component&gt; 有一个名为 item 的道具,我在其中传递了数组每个元素的值。

您可以了解更多信息,here免费

我希望这个答案能有所帮助。

【讨论】:

非常有帮助。非常感谢! :)

以上是关于如何将数据从 Vue 实例传递给嵌套组件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Angular 中的依赖注入将属性指令实例传递给嵌套组件

承诺解决并将道具传递给嵌套子项时如何更新Vue组件

如何将数据从 Vue 实例传递到 Vue.component?

Vue 组件:如何将数据从父级传递给子级

如何将数据传递给嵌套的子组件vue js?

将数据从 Vue 实例传递到 Vue 组件