javascript - Vuejs 计算属性依赖于其他异步计算属性

标签 javascript asynchronous vue.js

在我的 Vuejs 应用程序中,我需要将两个计算属性传递给名为 avatar 的组件:图像表面和字符串。

问题在于,并非所有项目都有图片,当没有图片时,vuejs 会抛出错误,因为它无法读取 undefined 的属性 apples (因为album_id未定义)。

该错误是从 avatar 组件中冗长的 src 属性引发的,如下所示:

<template>
    <div class="apples">
        <div id="mast" class="f3 b bb b--black-10">
            <h2 class="ttc">Apple's List</h2>
        </div>
        <div id="content">
            <li v-for="apple in apples" class="list-item">
                <avatar :src="apple[ 'album_id '][ 'apples' ][ '256' ]" :size="50" :appletype="apple.type"></avatar>
            </li>
        </div>
    </div>
</template>

<script>
    import Avatar from './Avatar.vue';
    import Apples from '@/api/apples';

    export default {
        name: 'apples',
        asyncComputed: {
            apples: {
                async get() {
                    const apples = await Apples.getAll();
                    return apples.data;
                },
                default: []
            }
        },
        components: {
            Avatar
        }
    };
</script>

在 html 模板中使用从 api 接收的数据之前,我需要以某种方式处理它,但我不确定如何继续。在 get() 函数中创建单独的图片数组似乎是错误的。

使用v-ifv-else来检查是否有src属性要传递也显得很笨拙。

我是否创建另一个单独的计算方法来迭代我的项目列表并获取图片src(如果项目有)?

最佳答案

我建议你需要为你的苹果酱创建 setter/getter .. er.. source.. er.. src :)

<template>
    <div class="apples">
        <div id="mast" class="f3 b bb b--black-10">
            <h2 class="ttc">Apple's List</h2>
        </div>
        <div id="content">
            <li v-for="apple in apples" class="list-item">
                <avatar :src="getAvatar(apple, 256)" :size="50" :appletype="apple.type"></avatar>
            </li>
        </div>
    </div>
</template>

<script>
    import Avatar from './Avatar.vue';
    import Apples from '@/api/apples';

    export default {
        name: 'apples',
        methods: {
            getAvatar: function(obj, id) {
                   return obj.album_id.apples[ id ] | ''
            }
        },
        asyncComputed: {
            apples: {
                async get() {
                    const apples = await Apples.getAll();
                    return apples.data;
                },
                default: []
            }
        },
        components: {
            Avatar
        }
    };
</script>

这允许您使用您选择的任何参数和实现创建一个优雅的后备。

关于javascript - Vuejs 计算属性依赖于其他异步计算属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46743282/

相关文章:

javascript - PyCharm 对 ID 进行重构,而不是在关联的 CSS 和 JS 文件中替换它

javascript - 从本地服务器访问 API

vue.js - 运行 Vue 应用程序时出现错误 "vue-cli-service: command not found"

Android 异步执行文件操作

ios - GCD/NSOperationQueue EXC_BAD_ACCESS

vue.js - 在 Vue.js + Electron 应用程序中获取和显示目录的所有文件夹和文件的好方法是什么?

javascript - 如何在 Vue 中的 v-for 列表项中切换两个图标

javascript - 通过滚动页面上的任意位置来滚动溢出的 div

javascript - 使用 zoom.center 转换 d3v6 Observable 示例

asynchronous - 用于并行执行的 Flutter 多个异步方法