radio涉及这么几个组件:radio、radio-group、radio-buttton。radio可以独立使用(虽然很少这么用),也可以和radio-group一起使用,radio-button组件可以说和radio组件是等价的,但是必须和radio-group一起使用。

当radio和radio-group一起使用的时候,我们再次遇到了这种父子关联组件通讯的问题,现在更推荐的解决方案是使用provide/inject,然而算是历史原因吧,element-ui采用的沿着$parent向上查找(相当于手动实现了一遍provide/inject),而且还有一个mixin emitter,其中的dispatch也是利用了这一思路调用父组件的方法。

还有一点用得很巧妙的是computed属性model

model: {
    get() {
        return this.isGroup ? this._radioGroup.value : this.value;
    },
    set(val) {
        if (this.isGroup) {
            this.dispatch('ElRadioGroup', 'input', [val]);
        } else {
            this.$emit('input', val);
        }
    }
},

这个技巧在我写的基于vue的通用后台被大量应用。

还有就是有些键盘相关的操作,像什么tabindex,其实我不是特别清楚多少人会有浏览网页时用键盘,尤其是tab的习惯。

results matching ""

    No results matching ""