Tutorial Notes Help

vue3.2代码片段合辑

props的使用

<!--a.vue--> <template> <div :style="{ color: props.color }">aa</div> </template> <script setup lang="ts"> const props = defineProps({ color: { type: String, default: "#000000", }, }); </script> <!--b.vue--> <template> <a :color=aColor>aa</a> </template> <script setup lang="ts"> import a from "./a.vue"; const aColor="#ff0000"; </script>

示例代码:svgicon

<template> <svgxmlns ="http://www.w3.org/2000/svg":width="props.size":height="props.size":fill="props.color":style=" { 'margin-right': '10' }" <p d="M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.414z/> </svg> </template> <script setup lang=" ts"> const props = defineProps({ color: {type: String,default: "#000000", }, size: {type: Number,default: 20, }, }); </script>

slot的使用:

<!--a.vue--> <template> <slot name="helloSlot">这是默认值!</slot> </template> <!--b.vue--> <template> <a> <template #helloSlot> aaaa </template> </a> </template> <script setup lang="ts">import a from "./a.vue";</script>

示例代码:没错!还是svgicon

<!--SVGIcon.vue--> <template> <svgxmlns ="http://www.w3.org/2000/svg":width="props.size":height="props.size":fill="props.color":style=" { 'margin-right': '10' }" <slot name="path <path d=" M15 4a1 1 0 1 0 0 2V4zm0 11v-1a1 1 0 0 0-1 1h1zm0 4l-.707.707A1 1 0 0 0 16 19h-1zm-4-4l.707-.707A1 1 0 0 0 11 14v1zm-4.707-1.293a1 1 0 0 0-1.414 1.414l1.414-1.414zm-.707.707l-.707-.707.707.707zM9 11v-1a1 1 0 0 0-.707.293L9 11zm-4 0h1a1 1 0 0 0-1-1v1zm0 4H4a1 1 0 0 0 1.707.707L5 15zm10-9h2V4h-2v2zm2 0a1 1 0 0 1 1 1h2a3 3 0 0 0-3-3v2zm1 1v6h2V7h-2zm0 6a1 1 0 0 1-1 1v2a3 3 0 0 0 3-3h-2zm-1 1h-2v2h2v-2zm-3 1v4h2v-4h-2zm1.707 3.293l-4-4-1.414 1.414 4 4 1.414-1.414zM11 14H7v2h4v-2zm-4 0c-.276 0-.525-.111-.707-.293l-1.414 1.414C5.42 15.663 6.172 16 7 16v-2zm-.707 1.121l3.414-3.414-1.414-1.414-3.414 3.414 1.414 1.414zM9 12h4v-2H9v2zm4 0a3 3 0 0 0 3-3h-2a1 1 0 0 1-1 1v2zm3-3V3h-2v6h2zm0-6a3 3 0 0 0-3-3v2a1 1 0 0 1 1 1h2zm-3-3H3v2h10V0zM3 0a3 3 0 0 0-3 3h2a1 1 0 0 1 1-1V0zM0 3v6h2V3H0zm0 6a3 3 0 0 0 3 3v-2a1 1 0 0 1-1-1H0zm3 3h2v-2H3v2zm1-1v4h2v-4H4zm1.707 4.707l.586-.586-1.414-1.414-.586.586 1.414 1.41 / </slot> </svg> </template> <script setup lang="ts"> const props = defineProps({ color: { type: String, default: "#000000", }, size: { type: Number, default: 20, }, }); </script> <!--IconCommunity.vue--> <template> <!--这边因为使用了默认值所以没给东西--> <Icon/> </template> <script setup lang="ts"> import Icon from "./SVGIcon.vue"; </script>

v-for的使用

注意事项:谁的属性写了v-for循环的就是谁,而不是子项。 例如: <a v-for><div></div></a> 这里就是循环的a而不是div

示例代码:菜单项

<template> <el-menu-item v-for="menuItem in menuList" :key="menuItem.id" :index="menuItem.id.toString()" > <CommunityIcon/> <span>{{ menuItem.title }}</span> </el-menu-item> </template> <script setup lang="ts"> import CommunityIcon from "Icons/IconCommunity.vue"; const menuList = ref([ { id: 0, title: "Hello" }, { id: 1, title: "World" }, { id: 2, title: "瑶瑶来啦!" }, { id: 3, title: "没有抽到纳西妲呜呜呜呜" }, ]); </script>

效果:

如何使用字符串加载组件

注意事项:不能完全使用setup语法糖....但是只需要export需要字符串加载的组件就可以了!

示例代码:从Json加载菜单

<template> <el-menu :style="{ border: 'none' }"> <el-menu-item v-for="menuItem in menuList" :key="menuItem.id" :index="menuItem.id.toString()" :style="{ 'border-bottom': '1px solid #ddd' }" > <component :is="menuItem.icon"></component> <span>{{ menuItem.title }}</span> </el-menu-item> </el-menu> </template> <script setup lang="ts"> import IconCommunity from "./icons/IconCommunity.vue"; const menuList = JSON.parse(` [ { "id": 0, "title": "菜单1", "icon": "IconCommunity", } ] `); </script> <script lang="ts"> export default { components: { IconCommunity, }, }; </script>

效果:

提一下,考虑到之后有多处如此使用及前端查看所有Icon并替换某个Icon的需求,所以考虑把用到的Icon组件全部注册为全局组件,这样就可以在vue文件中省略普通script的导出了!就可以跟正常的写法一样了!

Last modified: 16 十一月 2023