如何使用模板语法访问 vuejs 中的父数据值

Posted

技术标签:

【中文标题】如何使用模板语法访问 vuejs 中的父数据值【英文标题】:How to access parents data value in vuejs with the template syntax 【发布时间】:2019-05-31 12:24:45 【问题描述】:

在我的 VueJS 应用程序中,我使用 bootstrap-vue 并希望在可折叠元素 b-collapse 内使用 iframe。由于 iframe 内容和调整大小的一些问题(问题与这里无关),我发现如果我启用/禁用 b-embed 并进行条件渲染,它就可以工作。

父组件b-collapse 有一个名为show 的数据元素,如果单击切换,它会更改其状态。在我的HelloWorld 组件中,我希望b-collapse 可以将它的show 值传递给ifb-embed 检查。

我使用this.$parent.$data.show 的方法不起作用,我不确定是否有更好的方法。

<template>
<div>
  <b-btn v-b-toggle.logs>
    <span class="when-opened">Close</span>
    <span class="when-closed">Open</span>
    Trace
  </b-btn>
  <b-collapse id="logs">
    <b-embed :src="src" v-if="this.$parent.$data.show"></b-embed>
    <div>Data: this.$parent.$data.show</div>
  </b-collapse>
</div>
</template>


<script lang="ts">
import Vue from "vue";
import  Prop, Component, Inject  from "vue-property-decorator";

@Component
export default class HelloWorld extends Vue 
  src = "http://localhost:7681/";

</script>

【问题讨论】:

show 作为a property 传递给子组件。 【参考方案1】:

像这样:

parent.vue

<template>
    <Child :show="myShow"></Child>
</template>
<script>
    import Child from './child'
    export default 
        data () 
              return 
                   myShow: '***'
              
        ,
        components: Child
    
</script>

child.vue

<div>
  <b-btn v-b-toggle.logs>
    <span class="when-opened">Close</span>
    <span class="when-closed">Open</span>
    Trace
  </b-btn>
  <b-collapse id="logs">
    <b-embed :src="src" v-if="this.$parent.$data.show"></b-embed>
    <div>Data: this.$parent.$data.show</div>
  </b-collapse>
</div>
<script>
     export default 
          props: 
               show: 
                   type: Number,
                   require: true 
               
          
     
</script>     

或使用vuex 来执行此操作。

【讨论】:

实际上我想要的是在我的 HelloWorld 组件中 b-collapse 在b-embed v-if 中设置他的show 值。我无法修改 b-collapse/b-embed,因为它们是第 3 方 bootstrap-vue 的一部分。

以上是关于如何使用模板语法访问 vuejs 中的父数据值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用带有 Vuejs 的“Mustache”语法的烧瓶模板? [复制]

无法将文本绑定到 VueJS 模板中的 href 属性

VueJS:在没有集中存储(vuex 或 eventBus)的情况下直接访问子项(使用 vue-router)时访问子项中的父道具

如何在vuejs中的父组件中单击按钮时调用子组件

如何将 html 数据绑定到 vuejs 和 typescript 中的对象

在 Laravel Blade 中转义 VueJS 数据绑定语法?