【问题标题】:How pass and use a function callback inside Vue.js directive如何在 Vue.js 指令中传递和使用函数回调
【发布时间】:2016-06-22 00:53:14
【问题描述】:

我创建了一个新指令来使用 select2.js,我想在 select2 的更改事件中调用回调参数。

指令代码:

Vue.directive('select', {
twoWay: true,
priority: 1000,

params: ['options', 'change'],

bind: function() {
    var self = this;
    var vm = this.vm;
    var key = this.expression;
    $(this.el)
        .select2({
            data: this.params.options,
            theme: "bootstrap",
            language: "pt-BR",
            containerCssClass: ':all:'
        })
        .on('change', function() {
            self.set($(self.el).val());
            self.params.change($(self.el).val());
        });

    vm.$set(key, $(this.el).val());
},
update: function(value, oldValue) {
    $(this.el).val(value).trigger('change');
},
unbind: function() {
    $(this.el).off().select2('destroy');
}

});

并使用:

<select v-select="controller" change="getActions">
.... options ...
</select>

我找到的解决方案(不知道是不是最好的):

...

 .on('change', function() {
    self.set($(self.el).val());
    if(typeof vm[self.params.change] == 'function') vm[self.params.change]($(self.el).val());
  });

...

【问题讨论】:

  • 如果您想将函数作为参数/道具传递,我相信您需要将其创建为组件。 Select2 作为一个组件在我看来效果更好。

标签: vue.js


【解决方案1】:

这里是一个小提琴,展示了如何使用 select2 作为组件而不是指令来传递回调。

https://jsfiddle.net/vbranden/up8kb0j8/

本质上使“改变”道具成为一种功能

props: {
    change: { type: Function }
}

然后在更改事件中调用它(我在我的小提琴中使用 lodash)

$(self.$el).select2(config).on('select2:select select2:unselect', function () {
    if (_.isFunction(self.change)) self.change(v)
})

我最近在一个 vue 项目中使用了 select2,并且将它作为指令存在很多问题。作为一个组件,它工作得更好恕我直言

【讨论】:

  • 我找到了在指令中调用函数的解决方案,但我会尝试你的答案并制作一个组件。感谢您的帮助。
猜你喜欢
  • 2017-03-03
  • 2015-10-05
  • 2020-01-30
  • 2018-07-29
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2015-08-31
  • 2019-03-22
相关资源
最近更新 更多