我正在尝试创建简单的 Vue + CouchDB 应用程序。使用 Vanilla JS 可以正常工作,但我无法通过 Promise 或异步函数从数据库获取数据到我的 vue 实例。这是我的代码:
app.html
<div id="vue-app">
<table>
<thead>
<tr>
<th>{{ tableHead.name }}</th>
<th>{{ tableHead.lastname }}</th>
</tr>
</thead>
<tbody>
<tr v-for="data in tableData">
<td>{{ data.name }}</td>
<td>{{ data.lastname }}</td>
</tr>
</tbody>
</table>
</div>
app.js
const db = new PouchDB('testdb')
const couch = {
fetchData: async function () {
var dbData = await db.allDocs({
include_docs: true,
descending: true
}).then(function (result) {
var objects = {}
result.rows.forEach(function (data) {
objects[data.id] = data.doc
})
return objects
}).catch(function(err) {
return err
})
return dbData
}
}
var app = new Vue({
el: '#vue-app',
data: {
tableHead: {
name: 'Name',
lastname: 'Lastname'
}
},
computed: {
async tableData () {
var dbData = await fetchData()
return dbData
}
}
})
希望您能教我将数据获取到 Vue 实例的正确方法!
欢迎来到SO!
计算属性并不意味着是异步的。
解决数据异步检索的常见模式是:
- 使用内部
data
占位符
- 在组件生命周期钩子上启动异步请求
created
or mounted
- 请求成功后,更新内部
data
与新内容。
- 使用内部
data
在你的模板中。
就您而言,您会:
- 转动你的
tableData
进入内部data
, 像你的tableHead
- 致电您的
couch.fetchData
函数于created
hook.
- 在函数返回的Promise中
then
链(或等待后),分配您的tableData
结果
- Use
tableData
在您的模板中(无需更改)
例如,参见 Vue使用 Axios 使用 API 的食谱 https://v2.vuejs.org/v2/cookbook/using-axios-to-consume-apis.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)