Home > Net >  Can I dynamically change parent's function name in the child component instance with my setting
Can I dynamically change parent's function name in the child component instance with my setting

Time:09-25

Beginner looking for help. thank you so much.

Can I dynamically change parent's function name in the child component instance with my settings in data?

it works fine with this: <my-component btntext="TEXT" @emitfn="fn1">

but I need to do this: <my-component btntext="TEXT" @emitfn="emitname"> and Vue gives me error...

here's my code:

<div id="root">
    <my-component btntext="TEXT" @emitfn="emitname"></my-component>
</div>

<script>
Vue.component('myComponent', {
    props: ['btntext'],
    template: '<button @click="childFN">{{btntext}}</button>',
    methods: {
        childFN: function(){
            this.$emit("emitfn");
        }
    },
    data: function(){
        return {
            emitname: 'fn1'
        }
    }
});

var vm = new Vue({
    el: '#root',
    methods: {
        fn1: function(){
            alert('fn1');
        },
        fn2: function(){
            alert('fn2');
        }
    }
});
</script>

CodePudding user response:

You can reach a method using this.$options.methods['methodName'].

In your case you can use this:

Parent component:

<my-component btntext="TEXT" @emitfn="emitfn"></my-component>

methods: {
   fn1: function(){
      alert('fn1');
   },
   fn2: function(){
      alert('fn2');
   },
   emitfn(emitname) {
      this.$options.methods[emitname]();
   },
}

Child component:

methods: {
   childFN: function(){
      this.$emit("emitfn", this.emitname);
   }
},
  • Related