All files / src/directives/v-link index.js

8.69% Statements 2/23
0% Branches 0/10
0% Functions 0/8
8.69% Lines 2/23

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54          7x                                                   7x                                            
/**
 * 给任意元素添加`<a>`链接效果
 * 该指令适合在某些场景下临时使用,推荐直接使用`<u-link>`或者从`<m-router-item>`继承新组件
 * @modifier blank - 是否打开新的窗口
 */
export const href = {
    bind(el, binding) {
        el.dataset = el.dataset || {};
        el.dataset.href = binding.value;
        el.__hrefHandler = (e) => {
            if (binding.modifiers.blank)
                window.open(el.dataset.href);
            else
                location.href = el.dataset.href;
        };
        el.addEventListener('click', el.__hrefHandler);
    },
    update(el, binding) {
        el.dataset.href = binding.value;
    },
    unbind(el) {
        el.removeEventListener('click', el.__hrefHandler);
        delete el.__hrefHandler;
    },
};
 
/**
 * 给任意元素添加`<router-link>`的`to`效果
 * 该指令适合在某些场景下临时使用,推荐直接使用`<u-link>`或者从`<m-router-item>`继承新组件
 * @modifier replace - History 使用`push`方式还是`replace`方式
 */
export const to = {
    bind(el, binding, vnode) {
        el.dataset = el.dataset || {};
        el.dataset.to = binding.value;
 
        const $router = vnode.componentInstance.$router;
        if (!$router)
            return console.warn('[cloud-ui] Use `v-to` but cannot find vue router.');
 
        el.__toHandler = (e) => {
            binding.modifiers.replace ? $router.replace(el.dataset.to) : $router.push(el.dataset.to);
        };
        el.addEventListener('click', el.__toHandler);
    },
    update(el, binding) {
        el.dataset.to = binding.value;
    },
    unbind(el) {
        el.removeEventListener('click', el.__toHandler);
        delete el.__toHandler;
    },
};