components.js 2.3 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
export function initComponents(Vue, weex) {
  var components = function(vue) {
    "use strict";
    const OPEN_TYPES = [
      "navigate",
      "redirect",
      "switchTab",
      "reLaunch",
      "navigateBack"
    ];
    const navigatorProps = {
      hoverClass: {
        type: String,
        default: "navigator-hover"
      },
      url: {
        type: String,
        default: ""
      },
      openType: {
        type: String,
        default: "navigate",
        validator(value) {
          return Boolean(~OPEN_TYPES.indexOf(value));
        }
      },
      delta: {
        type: Number,
        default: 1
      },
      hoverStartTime: {
        type: [Number, String],
        default: 50
      },
      hoverStayTime: {
        type: [Number, String],
        default: 600
      },
      exists: {
        type: String,
        default: ""
      },
      hoverStopPropagation: {
        type: Boolean,
        default: false
      }
    };
    function createNavigatorOnClick(props) {
      return () => {
        if (props.openType !== "navigateBack" && !props.url) {
          console.error("<navigator/> should have url attribute when using navigateTo, redirectTo, reLaunch or switchTab");
          return;
        }
        switch (props.openType) {
          case "navigate":
            uni.navigateTo({
              url: props.url
            });
            break;
          case "redirect":
            uni.redirectTo({
              url: props.url,
              exists: props.exists
            });
            break;
          case "switchTab":
            uni.switchTab({
              url: props.url
            });
            break;
          case "reLaunch":
            uni.reLaunch({
              url: props.url
            });
            break;
          case "navigateBack":
            uni.navigateBack({
              delta: props.delta
            });
            break;
        }
      };
    }
    var Navigator = vue.defineComponent({
      name: "Navigator",
      props: navigatorProps,
      setup(props, {
        slots
      }) {
        const onClick = createNavigatorOnClick(props);
        return () => vue.createVNode("div", {
          "onClick": onClick
        }, [slots.default && slots.default()]);
      }
    });
    var index = {
      Navigator
    };
    return index;
  }(Vue);
  return components;
}