javascript - 在模板内使用 Vuex 存储中对象的嵌套属性

标签 javascript vue.js vuejs2 vue-component vuex

假设我的 Vuex.Store 有一个 getter,它返回一个具有许多属性的对象,并且我想在组件中使用该对象。有没有办法做类似的事情:

<div v-bind="$store.getters['x/y']">
   <p>{{scopedObject.prop1}}</p>
</div>

而不是:

<div>
   <p>{{$store.state.x.data.y.prop1}}</p>
</div>

最佳答案

I'm asking if I can scope objects to blocks.

简单的答案是

您可以定义 computed property它返回嵌套对象。

computed: {
    scopedObject() {
        return this.$store.getters['x/y'];
    }
}

事实上,这就是 mapGetters 的地方是用来使用的。

import { mapGetters } from 'vuex';

export default {
    computed: mapGetters({ scopedObject: 'x/y' }),
}

然后,模板就简单了

<div>
   <p>{{scopedObject.prop1}}</p>
</div>

如果您确实想创建一个新的范围,请定义一个新组件,该组件将仅定义您希望其使用的模板部分。

可以使用一个简单的prop,因此它不需要了解商店。

<template>
    <div>
        <p>{{scopedObject.prop1}}</p>
    </div>
</template>

<script>
    export default {
        props: {
            scopedObject: {
                type: Object,
                required: true
            },
        },
    };
</script>

然后,在父级中:

<template>
    <scoped-component :scoped-object="$store.getters['x/y']"><scoped-component>
</template>

关于javascript - 在模板内使用 Vuex 存储中对象的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682781/

相关文章:

javascript - Highcharts - 将鼠标悬停在饼图中的切片上时更改颜色

javascript - 将表格内的行显示到 <p> 下有一个文本区域

vue.js - 按下 ESC 键时关闭对话框

plugins - Vuejs,插件,找不到全局方法/属性

vue.js - Vue.js UI 中的插件和依赖项有什么区别?

javascript - 在 Vue 中使用带有动态属性的媒体查询

vue.js - Vue - 嵌套属性的默认值

非标准字符的 PHP 过滤器

javascript - 在 JavaScript 中添加带有参数的 onclick 事件

javascript - 添加自定义 @polkadot/types 时 Polkadot-js Babel 错误