Toggle show/hide on specific element with Vue.js (cdn)












6














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?










share|improve this question







New contributor




axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

























    6














    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?










    share|improve this question







    New contributor




    axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.























      6












      6








      6







      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?










      share|improve this question







      New contributor




      axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      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






      share|improve this question







      New contributor




      axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question







      New contributor




      axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question






      New contributor




      axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 7 hours ago









      axlu

      334




      334




      New contributor




      axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      axlu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.
























          3 Answers
          3






          active

          oldest

          votes


















          5














          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-->





          share|improve this answer





















          • This works! Thank you
            – axlu
            7 hours ago



















          3














          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"





          share|improve this answer































            1














            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






            share|improve this answer





















              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.










              draft saved

              draft discarded


















              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









              5














              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-->





              share|improve this answer





















              • This works! Thank you
                – axlu
                7 hours ago
















              5














              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-->





              share|improve this answer





















              • This works! Thank you
                – axlu
                7 hours ago














              5












              5








              5






              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-->





              share|improve this answer












              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-->






              share|improve this answer












              share|improve this answer



              share|improve this answer










              answered 7 hours ago









              Jeff

              14.6k13354




              14.6k13354












              • This works! Thank you
                – axlu
                7 hours ago


















              • This works! Thank you
                – axlu
                7 hours ago
















              This works! Thank you
              – axlu
              7 hours ago




              This works! Thank you
              – axlu
              7 hours ago













              3














              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"





              share|improve this answer




























                3














                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"





                share|improve this answer


























                  3












                  3








                  3






                  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"





                  share|improve this answer














                  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"






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 2 hours ago

























                  answered 7 hours ago









                  Louis R

                  8219




                  8219























                      1














                      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






                      share|improve this answer


























                        1














                        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






                        share|improve this answer
























                          1












                          1








                          1






                          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






                          share|improve this answer












                          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







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered 5 hours ago









                          Sandeep Soni

                          114




                          114






















                              axlu is a new contributor. Be nice, and check out our Code of Conduct.










                              draft saved

                              draft discarded


















                              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.




                              draft saved


                              draft discarded














                              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





















































                              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







                              Popular posts from this blog

                              What visual should I use to simply compare current year value vs last year in Power BI desktop

                              Alexandru Averescu

                              Trompette piccolo