I am trying to use a v-if
statement to show some HTML only if the archiveNote
variable is not empty/null.
<div v-if="archiveNote === null || archiveNote ===''" class="form-check ml-3" id="include-note-div">
Here is how it's instantiated
export default {
name: "ConfirmReleaseFilesModal",
props: {
archiveName: String,
archiveNote: String
},
which is then passed in from this other Vue file
<confirm-release-files-modal
v-if="showConfirmReleaseFilesModal"
@cancel="closeModal"
@confirmAndEmail="releaseAction"
@confirmNoEmail="releaseAction"
:archive-name="archiveName"
:archive-note ="archiveNote"
>
</confirm-release-files-modal>
The block of HTML still shows when archiveNote
is console.log
out as empty
If you want to show the <div>
only when it is truthy (not empty/null/etc.), you can simply do:
<div v-if="archiveNote">
This gives the same result as the double bang:
<div v-if="!!archiveNote">
Both of these expressions evaluate all 8 of JavaScript's falsy values to false
:
false
null
undefined
NaN
''
0n
(BigInt)and everything else to true
. So if your variable evaluates to anything but these it will be truthy, and the v-if
will show.
Here's a demo of these and some truthy examples:
new Vue({
el: "#app",
data() {
return {
falsy: {
'null': null,
'undefined': undefined,
'0': 0,
'-0': -0,
'\'\'': '',
'NaN': NaN,
'false': false,
'0n': 0n
},
truthy: {
'[]': [],
'{}': {},
'\'0\'': '0',
'1': 1,
'-1': -1,
'\' \'': ' ',
'\'false\'': 'false',
'5': 5
}
}
}
});
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
#falsy, #truthy {
display: inline-block;
width: 49%;
}
.label {
display: inline-block;
width: 80px;
text-align: right;
}
code {
background: #dddddd;
margin: 0 3px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div id="falsy">
Falsy:
<div v-for="(test, label) in falsy">
<div class="label">{{ label }}</div>
<code v-if="test">true</code>
<code v-else>false</code>
</div>
</div>
<div id="truthy">
Truthy examples:
<div v-for="(test, label) in truthy">
<div class="label">{{ label }}</div>
<code v-if="test">true</code>
<code v-else>false</code>
</div>
</div>
</div>