Toggle show/hide on specific element with Vue.js (cdn)
I'm using Vue.js (cdn) and axios to get stuff from heroku and mlab.
I want to display some information from the objects in a list and I want each line to act like a
button or have some sort of onclick that displays more information from the same object below. like a drop down.
I tried the button v-on:click="visible = !visible"...
And that works but it toggles show/hide on all of the elements, as expected.
I want to be able to toggle show/hide on a single element in a list of many.
This is what I have:
index.html
<div id="app">
<div class="list" v-for="drinks in rom">
<button v-on:click="visible = !visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
</div><!--app-->
main.js
new Vue({
el: '#app',
data() {
return {
rom: null,
visible: true
}
},
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data))
}})
What can I do?
javascript html vue.js
New contributor
add a comment |
I'm using Vue.js (cdn) and axios to get stuff from heroku and mlab.
I want to display some information from the objects in a list and I want each line to act like a
button or have some sort of onclick that displays more information from the same object below. like a drop down.
I tried the button v-on:click="visible = !visible"...
And that works but it toggles show/hide on all of the elements, as expected.
I want to be able to toggle show/hide on a single element in a list of many.
This is what I have:
index.html
<div id="app">
<div class="list" v-for="drinks in rom">
<button v-on:click="visible = !visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
</div><!--app-->
main.js
new Vue({
el: '#app',
data() {
return {
rom: null,
visible: true
}
},
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data))
}})
What can I do?
javascript html vue.js
New contributor
add a comment |
I'm using Vue.js (cdn) and axios to get stuff from heroku and mlab.
I want to display some information from the objects in a list and I want each line to act like a
button or have some sort of onclick that displays more information from the same object below. like a drop down.
I tried the button v-on:click="visible = !visible"...
And that works but it toggles show/hide on all of the elements, as expected.
I want to be able to toggle show/hide on a single element in a list of many.
This is what I have:
index.html
<div id="app">
<div class="list" v-for="drinks in rom">
<button v-on:click="visible = !visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
</div><!--app-->
main.js
new Vue({
el: '#app',
data() {
return {
rom: null,
visible: true
}
},
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data))
}})
What can I do?
javascript html vue.js
New contributor
I'm using Vue.js (cdn) and axios to get stuff from heroku and mlab.
I want to display some information from the objects in a list and I want each line to act like a
button or have some sort of onclick that displays more information from the same object below. like a drop down.
I tried the button v-on:click="visible = !visible"...
And that works but it toggles show/hide on all of the elements, as expected.
I want to be able to toggle show/hide on a single element in a list of many.
This is what I have:
index.html
<div id="app">
<div class="list" v-for="drinks in rom">
<button v-on:click="visible = !visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
</div><!--app-->
main.js
new Vue({
el: '#app',
data() {
return {
rom: null,
visible: true
}
},
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data))
}})
What can I do?
javascript html vue.js
javascript html vue.js
New contributor
New contributor
New contributor
asked 7 hours ago
axlu
334
334
New contributor
New contributor
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
You'll want to declare rom as an array:
data() {
return {
rom:
}
},
Then you can add a visible
property to each data item in your API response:
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data.map(drinks => {
drinks.visible = true;
return drinks;
})
))
}})
Then you can use that visible
property in each loop of your v-for
:
<div class="list" v-for="drinks in rom">
<button v-on:click="drinks.visible = !drinks.visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!drinks.visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
This works! Thank you
– axlu
7 hours ago
add a comment |
You can add a visible property to your drink object, and then
v-on:click="drink.visible = !drink.visible"
Or you can create an array mapped with your drink with the id as key, and true or false as value and then :
v-on:click="drinksVisibility[drink.id].visible = !drinksVisibility[drink.id].visible"
add a comment |
you can have a visible property in each object and render elements
rom : [{brand: 'drink1',visible: false,comment: 'drink1 - comment'},
{brand: 'drink2',visible: false,comment: 'drink2 - comment'}]
then write a toggle function to show/hide an element by passing an index value to modify particular object visible value true/false
<button v-on:click=toggle(index)>{{ drinks.brand }}</button>
example : https://codepen.io/sandeep821/pen/YdxjWg
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
axlu is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53947576%2ftoggle-show-hide-on-specific-element-with-vue-js-cdn%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You'll want to declare rom as an array:
data() {
return {
rom:
}
},
Then you can add a visible
property to each data item in your API response:
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data.map(drinks => {
drinks.visible = true;
return drinks;
})
))
}})
Then you can use that visible
property in each loop of your v-for
:
<div class="list" v-for="drinks in rom">
<button v-on:click="drinks.visible = !drinks.visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!drinks.visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
This works! Thank you
– axlu
7 hours ago
add a comment |
You'll want to declare rom as an array:
data() {
return {
rom:
}
},
Then you can add a visible
property to each data item in your API response:
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data.map(drinks => {
drinks.visible = true;
return drinks;
})
))
}})
Then you can use that visible
property in each loop of your v-for
:
<div class="list" v-for="drinks in rom">
<button v-on:click="drinks.visible = !drinks.visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!drinks.visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
This works! Thank you
– axlu
7 hours ago
add a comment |
You'll want to declare rom as an array:
data() {
return {
rom:
}
},
Then you can add a visible
property to each data item in your API response:
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data.map(drinks => {
drinks.visible = true;
return drinks;
})
))
}})
Then you can use that visible
property in each loop of your v-for
:
<div class="list" v-for="drinks in rom">
<button v-on:click="drinks.visible = !drinks.visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!drinks.visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
You'll want to declare rom as an array:
data() {
return {
rom:
}
},
Then you can add a visible
property to each data item in your API response:
mounted() {
axios
.get('******')
.then(response => (this.rom = response.data.map(drinks => {
drinks.visible = true;
return drinks;
})
))
}})
Then you can use that visible
property in each loop of your v-for
:
<div class="list" v-for="drinks in rom">
<button v-on:click="drinks.visible = !drinks.visible">{{ drinks.brand }}</button>
<div class="hidden" v-show="!drinks.visible">
<p> {{ drinks.comment }} </p>
</div>
</div><!--list-->
answered 7 hours ago
Jeff
14.6k13354
14.6k13354
This works! Thank you
– axlu
7 hours ago
add a comment |
This works! Thank you
– axlu
7 hours ago
This works! Thank you
– axlu
7 hours ago
This works! Thank you
– axlu
7 hours ago
add a comment |
You can add a visible property to your drink object, and then
v-on:click="drink.visible = !drink.visible"
Or you can create an array mapped with your drink with the id as key, and true or false as value and then :
v-on:click="drinksVisibility[drink.id].visible = !drinksVisibility[drink.id].visible"
add a comment |
You can add a visible property to your drink object, and then
v-on:click="drink.visible = !drink.visible"
Or you can create an array mapped with your drink with the id as key, and true or false as value and then :
v-on:click="drinksVisibility[drink.id].visible = !drinksVisibility[drink.id].visible"
add a comment |
You can add a visible property to your drink object, and then
v-on:click="drink.visible = !drink.visible"
Or you can create an array mapped with your drink with the id as key, and true or false as value and then :
v-on:click="drinksVisibility[drink.id].visible = !drinksVisibility[drink.id].visible"
You can add a visible property to your drink object, and then
v-on:click="drink.visible = !drink.visible"
Or you can create an array mapped with your drink with the id as key, and true or false as value and then :
v-on:click="drinksVisibility[drink.id].visible = !drinksVisibility[drink.id].visible"
edited 2 hours ago
answered 7 hours ago
Louis R
8219
8219
add a comment |
add a comment |
you can have a visible property in each object and render elements
rom : [{brand: 'drink1',visible: false,comment: 'drink1 - comment'},
{brand: 'drink2',visible: false,comment: 'drink2 - comment'}]
then write a toggle function to show/hide an element by passing an index value to modify particular object visible value true/false
<button v-on:click=toggle(index)>{{ drinks.brand }}</button>
example : https://codepen.io/sandeep821/pen/YdxjWg
add a comment |
you can have a visible property in each object and render elements
rom : [{brand: 'drink1',visible: false,comment: 'drink1 - comment'},
{brand: 'drink2',visible: false,comment: 'drink2 - comment'}]
then write a toggle function to show/hide an element by passing an index value to modify particular object visible value true/false
<button v-on:click=toggle(index)>{{ drinks.brand }}</button>
example : https://codepen.io/sandeep821/pen/YdxjWg
add a comment |
you can have a visible property in each object and render elements
rom : [{brand: 'drink1',visible: false,comment: 'drink1 - comment'},
{brand: 'drink2',visible: false,comment: 'drink2 - comment'}]
then write a toggle function to show/hide an element by passing an index value to modify particular object visible value true/false
<button v-on:click=toggle(index)>{{ drinks.brand }}</button>
example : https://codepen.io/sandeep821/pen/YdxjWg
you can have a visible property in each object and render elements
rom : [{brand: 'drink1',visible: false,comment: 'drink1 - comment'},
{brand: 'drink2',visible: false,comment: 'drink2 - comment'}]
then write a toggle function to show/hide an element by passing an index value to modify particular object visible value true/false
<button v-on:click=toggle(index)>{{ drinks.brand }}</button>
example : https://codepen.io/sandeep821/pen/YdxjWg
answered 5 hours ago
Sandeep Soni
114
114
add a comment |
add a comment |
axlu is a new contributor. Be nice, and check out our Code of Conduct.
axlu is a new contributor. Be nice, and check out our Code of Conduct.
axlu is a new contributor. Be nice, and check out our Code of Conduct.
axlu is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53947576%2ftoggle-show-hide-on-specific-element-with-vue-js-cdn%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown