Skip to content

模块

  • Vue3 为了方便业务拓展,引入了模块的改变

自定义模块

js
import { ref, onMounted, onUnmounted } from "vue";

function useMouseDownHooks() {
  let x = ref(0);
  let y = ref(0);
  onMounted(() => {
    document.addEventListener("click", function (e) {
      x.value = e.x;
      y.value = e.y;
    });
  });
  onUnmounted(() => {
    document.removeEventListener("click", function () {
      console.log("移除了");
    });
  });

  return {
    x,
    y,
  };
}

export default useMouseDownHooks;

组件里面引入模块

  • 使用模块
html
<template>
  <div>
    <span>{{count}}</span>
    <span>{{double}}</span>
    <div @click="changecount">点击增加</div>
    <span> x:{{x}} y:{{y}}</span>
  </div>
</template>

<script>
  import { ref, computed, reactive, toRefs, onMounted, watch } from "vue"; //ref接收一个参数 返回一个响应式对象  //computed是一个函数接收一个参数是函数
  import useMouseDownHooks from "../hooks/useMousedown";
  export default {
    setup() {
      onMounted(() => {
        console.log("挂在了");
      });
      const data = reactive({
        count: 0,
        double: computed(() => {
          return data.count * 2;
        }),
        changecount: () => {
          data.count++;
        },
      });
      let data2 = ref("哈哈");
      watch(
        [
          data2,
          () => {
            return data.count;
          },
          () => {
            return data.double;
          },
        ],
        (newval, oldval) => {
          console.log(newval);
          console.log(oldval);
        }
      );
      let { x, y } = useMouseDownHooks(); //开始赋值
      const result = toRefs(data);
      return {
        ...result,
        x,
        y,
      };
    },
  };
</script>

<style lang="less" scoped></style>

有的时候需要在模块里互用数据

  • 引入的模块 usehools2.js
js
import { ref } from "vue";

function useMouseDownHooks2() {
  let x = ref(200);
  let y = ref(2000);
  return {
    x,
    y,
  };
}

export default useMouseDownHooks2;
  • 主模块
js
import { ref, onMounted, onUnmounted } from "vue";
import UseHooks2 from "./usehooks2";
function useMouseDownHooks() {
  onMounted(() => {
    console.log(UseHooks2);
  });
  const { x, y } = UseHooks2();
  return {
    x,
    y,
  };
}

export default useMouseDownHooks;

引用的模块里面要使用方法

  • 引入的模块
js
import { ref } from "vue";

function useMouseDownHooks2() {
  let x = ref(200);
  let y = ref(2000);
  return {
    x,
    y,
  };
}

export default useMouseDownHooks2;
  • 主模块
js
import { ref, onMounted, onUnmounted, reactive, toRefs } from "vue";
import UseHooks2 from "./usehooks2";
function useMouseDownHooks() {
  onMounted(() => {
    console.log(UseHooks2);
  });
  const { x, y } = UseHooks2();
  const data = reactive({
    printworld() {
      console.log("打印出来");
    },
  });
  return {
    x,
    y,
    ...toRefs(data),
  };
}

export default useMouseDownHooks;
  • 组件使用(有所不同)
bash
要是集成的话必须使用value,通过它传递参数
html
<template>
  <div>{{ message }} --- {{ data2 }}</div>
  <div>{{ x }} ---{{ y }}</div>
</template>

<script>
  import { onMounted, reactive, ref, toRefs } from "vue";
  import UseHooks from "../hooks/usehooks";
  export default {
    setup() {
      let ContentHooks = UseHooks(); //开始
      const data = reactive({
        message: "首页",
        x: ContentHooks.x,
        y: ContentHooks.y,
      });
      const data2 = ref("测试");
      onMounted(() => {
        console.log(ContentHooks);
        ContentHooks.printworld.value();
      });

      return {
        ...toRefs(data),
        ...ContentHooks,
        data2,
      };
    },
  };
</script>

<style lang="less" scoped></style>