【问题标题】:How to access the promise result from the HTML in Vuejs如何从 Vuejs 中的 HTML 访问 promise 结果
【发布时间】:2021-09-14 11:09:44
【问题描述】:

我正在为一个大学项目使用 Vuejs 做一个网站。
该功能的范围是找出一本书是否被设置为收藏,然后返回图标的名称,以便自动设置正确的图标。
为此,我创建了函数setIcon()

setIcon: async function (id) {
    var favs = await DataService.getFav();
    var isFav = favs.find((book) => book.id === id);
    if (isFav === undefined) {
       return "favorite_border";
    } 
    else
    {
       return "favorite";
    }
}

然后,只需在图标标记内的 HTML 部分中调用该函数。
出于调试的原因,我去掉了图标标签,只留下了一个按钮,所以我可以看到函数的返回值是什么作为按钮的名称。

 <md-button class="md-button" @click.stop="setFav(book.id)">
       {{ setIcon(book.id) }}
 </md-button>

问题在于函数返回的值是Promise Object,而不是字符串"favorite_border""favorite"

所以我的问题是如何在 HTML 部分访问承诺的结果?

我也尝试将.then() 部分放在setIcon() 之后,但结果是一样的

【问题讨论】:

  • 不用模板直接调用setIcon(),让组件在mount的时候调用,把结果写入state;模板应该读取状态变量。

标签: javascript html vue.js promise


【解决方案1】:

你不必使用async,试试这个:

setIcon: function(id) {
    DataService.getFav().then((favs) = >{
        var isFav = favs.find((book) = >book.id === id);
        if (isFav === undefined) {
            return "favorite_border";
        } else {
            return "favorite";
        }
    })
}

如果DataService.getFav()方法没有参数并且得到相同的结果,你应该将结果缓存在另一个方法中,否则每次执行setIcon都会调用DataService.getFav(),这是对性能的浪费。

【讨论】:

  • 谢谢,最后我解决了在数据中创建变量Favorite[ ]的问题,所以我可以从任何地方访问它,我把它填入created: function() {},这样我只需要调用它第一次创建 page 而不是每次创建 card 然后在函数 setIcon() 我把 find 函数和条件设置图标,它的工作原理
猜你喜欢
  • 2021-03-14
  • 2021-01-13
  • 2017-04-19
  • 2014-03-10
  • 1970-01-01
  • 2019-01-15
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多