VueJS 条件 属性 未定义,但肯定存在
VueJS conditional property undefined whereas it exists for sure
我在 Quasar(基于 VueJS)中使用一个商店,当我在我的数据库中插入一个新的 object 时,商店会更新。 object 被命名为 "demande",它们有一个 "dateDemande" 属性。一切看起来都很好,但由于某种原因,当我想在标题中显示它时,这个 属性 没有显示,尽管它显示在 q-card 部分:
<template>
<q-pull-to-refresh @refresh="actualiserListe">
<q-page padding>
<q-list bordered class="rounded-borders">
<q-expansion-item
v-for="demande in demandes"
:key="demande.idDemande"
class="q-my-sm"
:icon="icone(demande.statut).icone"
:header-class="icone(demande.statut).color"
:label="demande.texte"
:caption="demande.dateDemande">
<q-separator />
<q-card>
<q-card-section>
{{ demande.statut }}
</q-card-section>
<q-card-section>
{{ demande.idDemande }}
</q-card-section>
<q-card-section>
{{ demande.dateDemande }}
</q-card-section>
</q-card>
</q-expansion-item>
</q-list>
</q-page>
</q-pull-to-refresh>
</template>
以下是我如何插入 "demande" 并更新商店:
export const ajouterDemande = (state, demande) => {
window.sqlitePlugin.openDatabase ({ name: 'xxx.db', location: 'default' }, function (db) {
db.transaction (function (tx) {
var dateDemande = new Date ()
tx.executeSql ('INSERT INTO demandes (dateDemande, texte, statut) VALUES (?,?,?)', [dateDemande, demande.texte, 'En cours'], function (tx, resultSet) {
demande.idDemande = resultSet.insertId
demande.dateDemande = dateDemande
demande.statut = 'En cours'
}, function (tx, error) {
alert ('INSERT error: ' + error.message)
db.close()
})
}, function (error) {
alert ('transaction error: ' + error.message)
db.close()
}, function () {
console.log ('transaction ok')
state.demandes.push (demande)
db.close(function () {
console.log('database is closed ok')
})
})
}, function (err) {
alert ('[BDD] ERREUR: ' + JSON.stringify(err))
})
}
这真的很奇怪,因为这是唯一的 属性 不起作用。以下是我在启动应用程序时刷新列表的方式,这样所有内容都可以正确显示:
export const actualiserListe = (state) => {
state.demandes = []
window.sqlitePlugin.openDatabase ({ name: 'xxx.db', location: 'default' }, function (db) {
db.readTransaction (function (tx) {
tx.executeSql ("SELECT * FROM demandes", [], function (tx, resultSet) {
for (var x = 0; x < resultSet.rows.length; x++) {
alert (JSON.stringify(resultSet.rows.item(x)))
state.demandes.push ({
idDemande: resultSet.rows.item(x).idDemande,
dateDemande: resultSet.rows.item(x).dateDemande,
texte: resultSet.rows.item(x).texte,
statut: resultSet.rows.item(x).statut
})
}
}, function (tx, error) {
console.log ('SELECT error: ' + error.message)
db.close()
})
}, function (error) {
console.log ('transaction error: ' + error.message)
db.close()
}, function () {
console.log ('transaction ok')
db.close(function () {
console.log('database is closed ok')
})
})
}, function (err) {
alert ('[BDD] ERREUR: ' + JSON.stringify(err))
})
}
如果有人能帮助我,那就太好了。谢谢:)
可能问题在于 caption
prop 需要字符串,而您将日期 属性 传递给它。
尝试在上面调用 .toString()
例如在您的代码中
<template>
<q-pull-to-refresh @refresh="actualiserListe">
<q-page padding>
<q-list bordered class="rounded-borders">
<q-expansion-item
v-for="demande in demandes"
:key="demande.idDemande"
class="q-my-sm"
:icon="icone(demande.statut).icone"
:header-class="icone(demande.statut).color"
:label="demande.texte"
:caption="demande.dateDemande.toString()">
<q-separator />
<q-card>
<q-card-section>
{{ demande.statut }}
</q-card-section>
<q-card-section>
{{ demande.idDemande }}
</q-card-section>
<q-card-section>
{{ demande.dateDemande }}
</q-card-section>
</q-card>
</q-expansion-item>
</q-list>
</q-page>
</q-pull-to-refresh>
</template>
我在 Quasar(基于 VueJS)中使用一个商店,当我在我的数据库中插入一个新的 object 时,商店会更新。 object 被命名为 "demande",它们有一个 "dateDemande" 属性。一切看起来都很好,但由于某种原因,当我想在标题中显示它时,这个 属性 没有显示,尽管它显示在 q-card 部分:
<template>
<q-pull-to-refresh @refresh="actualiserListe">
<q-page padding>
<q-list bordered class="rounded-borders">
<q-expansion-item
v-for="demande in demandes"
:key="demande.idDemande"
class="q-my-sm"
:icon="icone(demande.statut).icone"
:header-class="icone(demande.statut).color"
:label="demande.texte"
:caption="demande.dateDemande">
<q-separator />
<q-card>
<q-card-section>
{{ demande.statut }}
</q-card-section>
<q-card-section>
{{ demande.idDemande }}
</q-card-section>
<q-card-section>
{{ demande.dateDemande }}
</q-card-section>
</q-card>
</q-expansion-item>
</q-list>
</q-page>
</q-pull-to-refresh>
</template>
以下是我如何插入 "demande" 并更新商店:
export const ajouterDemande = (state, demande) => {
window.sqlitePlugin.openDatabase ({ name: 'xxx.db', location: 'default' }, function (db) {
db.transaction (function (tx) {
var dateDemande = new Date ()
tx.executeSql ('INSERT INTO demandes (dateDemande, texte, statut) VALUES (?,?,?)', [dateDemande, demande.texte, 'En cours'], function (tx, resultSet) {
demande.idDemande = resultSet.insertId
demande.dateDemande = dateDemande
demande.statut = 'En cours'
}, function (tx, error) {
alert ('INSERT error: ' + error.message)
db.close()
})
}, function (error) {
alert ('transaction error: ' + error.message)
db.close()
}, function () {
console.log ('transaction ok')
state.demandes.push (demande)
db.close(function () {
console.log('database is closed ok')
})
})
}, function (err) {
alert ('[BDD] ERREUR: ' + JSON.stringify(err))
})
}
这真的很奇怪,因为这是唯一的 属性 不起作用。以下是我在启动应用程序时刷新列表的方式,这样所有内容都可以正确显示:
export const actualiserListe = (state) => {
state.demandes = []
window.sqlitePlugin.openDatabase ({ name: 'xxx.db', location: 'default' }, function (db) {
db.readTransaction (function (tx) {
tx.executeSql ("SELECT * FROM demandes", [], function (tx, resultSet) {
for (var x = 0; x < resultSet.rows.length; x++) {
alert (JSON.stringify(resultSet.rows.item(x)))
state.demandes.push ({
idDemande: resultSet.rows.item(x).idDemande,
dateDemande: resultSet.rows.item(x).dateDemande,
texte: resultSet.rows.item(x).texte,
statut: resultSet.rows.item(x).statut
})
}
}, function (tx, error) {
console.log ('SELECT error: ' + error.message)
db.close()
})
}, function (error) {
console.log ('transaction error: ' + error.message)
db.close()
}, function () {
console.log ('transaction ok')
db.close(function () {
console.log('database is closed ok')
})
})
}, function (err) {
alert ('[BDD] ERREUR: ' + JSON.stringify(err))
})
}
如果有人能帮助我,那就太好了。谢谢:)
可能问题在于 caption
prop 需要字符串,而您将日期 属性 传递给它。
尝试在上面调用 .toString()
例如在您的代码中
<template>
<q-pull-to-refresh @refresh="actualiserListe">
<q-page padding>
<q-list bordered class="rounded-borders">
<q-expansion-item
v-for="demande in demandes"
:key="demande.idDemande"
class="q-my-sm"
:icon="icone(demande.statut).icone"
:header-class="icone(demande.statut).color"
:label="demande.texte"
:caption="demande.dateDemande.toString()">
<q-separator />
<q-card>
<q-card-section>
{{ demande.statut }}
</q-card-section>
<q-card-section>
{{ demande.idDemande }}
</q-card-section>
<q-card-section>
{{ demande.dateDemande }}
</q-card-section>
</q-card>
</q-expansion-item>
</q-list>
</q-page>
</q-pull-to-refresh>
</template>