账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vue子组件作为slot如何调用父组件的方法并传值?
    31
    0

    最近想实现一个checkbox组件,遇到了这个问题。大家看看我的代码,怎样才可以触发checkboxGroup的pushItem方法并拿到值。将@pushItem事件绑定到父元素没有作用。谢谢!

    <checkbox-group  v-model="checkList">
            <check-box
              v-for="(item,index) in data"
              v-bind:key="index"
              :label="item.name"
              :value="item.id"
            ></check-box>
    </checkbox-group>

    CheckboxGroup.vue

    <template>
      <div class="checkbox-group-wrap" ref="checkboxGroup">
        <slot></slot>
      </div>
    </template>
    <script lang='ts'>
    import { Component, Vue, Watch, Prop } from "vue-property-decorator";
    @Component({
      components: {}
    })
    export default class extends Vue {
      private checkBoxGroup: string[] = ["2", "3"];
      private pushItem(value) {
        this.checkBoxGroup.push(value);
        this.$emit("input", this.checkBoxGroup);
      }
      private removeItem(value) {
        const index = this.checkBoxGroup.indexOf(value);
        this.checkBoxGroup.splice(index, 1);
        this.$emit("input", this.checkBoxGroup);
      }
    }
    </script>
    <style scoped lang="scss">
    </style>

    CheckBox.vue

    <template>
      <div class="checkbox-wrap" @click="handleClick">
        <div class="left" :class="isChecked?'box-click':''" ref="box">
          <transition name="fade">
            <div class="hook" v-show="isChecked"></div>
          </transition>
        </div>
        <div class="right">{{label}}</div>
      </div>
    </template>
    <script lang='ts'>
    import { Component, Vue, Watch, Prop } from "vue-property-decorator";
    @Component({
      components: {}
    })
    export default class extends Vue {
      private isChecked: boolean = false;
      @Prop()
      private label!: string;
      @Prop()
      private value!: string;
      private handleClick() {
        if (!this.isChecked) {
          this.$emit("pushItem", this.value);
        } else {
          this.$emit("removeItem", this.value);
        }
        this.isChecked = !this.isChecked;
      }
    }
    </script>
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部