共享切换按钮上的Vue JS v-if条件渲染

时间:2018-09-02 16:27:53

标签: javascript json vuejs2 vue-component vuex

        //PARENT COMPONENT

     <template>
          ....
        <div class="input-wrapper">//Toggle button container
            <label class="input-label">
              SELECT YES OR NOT
            </label>
            <toggle //child component, toggle button
            :options="shipping"
          />
        </div>
        <div
           v-if="destiny[0].value"
           class="input-wrapper">
            <label class="input-label">
              IF YES THIS CONTAINER WILL BE DISPLAYED
            </label>
            <toggle
              :options="Options"
              />
         </div>

                .....
        </template>
        <script>
        import Toggle from "....";
                export default {
                  components: {
                    Toggle,
                  },
                  data: function () {
                    return {
                      destiny: [{
                        label: 'Yes',
                        value: true
                      },
                      {
                        label: 'No',
                        value: false
                      }
                      ],
                      Options: [{
                        label: 'A',
                        value: 'a'
                      },
                      {
                        label: 'B',
                        value: 'b'
                      },
                      {
                        label: 'C',
                        value: 'c'
                      }]
                    }
                  }
                }
               </script>


        ///CHILD COMPONENT


        <template>
          <div class="toggle">
             <button
               v-for="option in options"
               :key="option.value"
               :class="{
                 active: option.value === value
               }"
               class="btn"
               @click="() => toggleHandler(option.value)">{{ option.label }} . 
             </button>
          </div>
        </template>

            <script>

            export default {
              props: {
                options: {
                  type: Array,
                  required: true
                }
              },
              data: function () {
                return {
                  value: this.options[0].value
                }
              },
              methods: {
                toggleHandler (value) {
                  this.$emit('input', value)
                  this.value = value
                }
              }
            }
            </script>

有一个切换到选项“是”或“不是”的选项,如果选择“是”或“否”,则将渲染子组件,否则将保持隐藏状态。 我正在尝试使用条件指令,以便使用指令 v-if v-show 将子组件显示为父组件,但我找不到方法将布尔值 value 从子组件发送到父组件。

1 个答案:

答案 0 :(得分:1)

希望这会有所帮助!

// CHILD
Vue.component('child', {
	template: '<div>TOGGLE:- <input type="checkbox" @click="emit"/></div>',
	data() {
		return {
			checked: false
		};
	},
	methods: {
		emit: function() {
			this.checked = !this.checked;
			this.$emit('event_child', this.checked);
		}
	}
});

// PARENT
var vm = new Vue({
	el: '#app',
	data: function() {
		return {
			toggleStatus: false
		}
	},
	methods: {
		eventChild: function(checked) {
			this.toggleStatus = checked;
		},
	}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>

<div id="app">	
	<child v-on:event_child="eventChild"></child>
  <div id="toggle">TOGGLE STATUS => {{toggleStatus}}</div>
</div>