《Asp.Net Core3 + Vue3入坑教程》 此教程适合新手入门或者先后端分离尝试者。能够根据图文一步一步进操做编码也能够选择直接查看源码。每一篇文章都有对应的源码css
Asp.Net Core后端项目html
Vue3 前端项目前端
本文为《Asp.Net Core3 + Vue3入坑教程》系列教程的前端第二篇 - 使用Ant Design of Vue编写页面 & vue-router 初试。本文接着上文《使用vue-cli建立vue项目》新建的simple-vue的基础上将使用Ant Design of Vue建立简单页面,并结合vue-router实现页面之间的简单跳转,具体效果以下:vue
Ant Design of Vue 官方文档 https://2x.antdv.com/docs/vue/getting-started-cnreact
Vetur插件简介 https://marketplace.visualstudio.com/items?itemName=octref.veturgit
在终端执行命令:github
yarn add ant-design-vue@next
代码以下:vue-router
import { createApp } from 'vue' import App from './App.vue' import Antd from 'ant-design-vue'; import 'ant-design-vue/dist/antd.css'; createApp(App).use(Antd).mount('#app')
代码以下:vuex
<template> <a-layout style="min-height: 100vh"> <a-layout-sider v-model:collapsed="collapsed" collapsible> <div class="logo" /> <a-menu theme="dark" v-model:selectedKeys="selectedKeys" mode="inline"> <a-menu-item key="1"> <pie-chart-outlined /> <span>Option 1</span> </a-menu-item> <a-menu-item key="2"> <desktop-outlined /> <span>Option 2</span> </a-menu-item> <a-sub-menu key="sub1"> <template #title> <span> <user-outlined /> <span>User</span> </span> </template> <a-menu-item key="3">Tom</a-menu-item> <a-menu-item key="4">Bill</a-menu-item> <a-menu-item key="5">Alex</a-menu-item> </a-sub-menu> <a-sub-menu key="sub2"> <template #title> <span> <team-outlined /> <span>Team</span> </span> </template> <a-menu-item key="6">Team 1</a-menu-item> <a-menu-item key="8">Team 2</a-menu-item> </a-sub-menu> <a-menu-item key="9"> <file-outlined /> <span>File</span> </a-menu-item> </a-menu> </a-layout-sider> <a-layout> <a-layout-header style="background: #fff; padding: 0" /> <a-layout-content style="margin: 0 16px"> <a-breadcrumb style="margin: 16px 0"> <a-breadcrumb-item>User</a-breadcrumb-item> <a-breadcrumb-item>Bill</a-breadcrumb-item> </a-breadcrumb> <div :style="{ padding: '24px', background: '#fff', minHeight: '360px' }"> Bill is a cat. </div> </a-layout-content> <a-layout-footer style="text-align: center"> Ant Design ©2018 Created by Ant UED </a-layout-footer> </a-layout> </a-layout> </template> <script> import { PieChartOutlined, DesktopOutlined, UserOutlined, TeamOutlined, FileOutlined, } from '@ant-design/icons-vue'; import { defineComponent, ref } from 'vue'; export default defineComponent({ name: 'Home', components: { PieChartOutlined, DesktopOutlined, UserOutlined, TeamOutlined, FileOutlined, }, data() { return { collapsed: ref(false), selectedKeys: ref(['1']), }; }, }); </script> <style> #components-layout-demo-side .logo { height: 32px; margin: 16px; background: rgba(255, 255, 255, 0.3); } .site-layout .site-layout-background { background: #fff; } [data-theme='dark'] .site-layout .site-layout-background { background: #141414; } </style>
代码以下:
<template> <div class="login-container"> <a-form layout="horizontal" :model="formState" @finish="handleFinish" @finishFailed="handleFinishFailed" > <a-form-item> <a-input v-model:value="formState.user" placeholder="Username"> <template #prefix><UserOutlined style="color: rgba(0, 0, 0, 0.25)" /></template> </a-input> </a-form-item> <a-form-item> <a-input v-model:value="formState.password" type="password" placeholder="Password"> <template #prefix><LockOutlined style="color: rgba(0, 0, 0, 0.25)" /></template> </a-input> </a-form-item> <a-form-item> <a-button type="primary" html-type="submit" :disabled="formState.user === '' || formState.password === ''" > Log in </a-button> </a-form-item> </a-form> </div> </template> <script> import { UserOutlined, LockOutlined } from '@ant-design/icons-vue'; import { defineComponent, reactive } from 'vue'; export default defineComponent({ name: 'Login', setup() { const formState = reactive({ user: '', password: '', }); const handleFinish = values => { console.log(values, formState); }; const handleFinishFailed = errors => { console.log(errors); }; return { formState, handleFinish, handleFinishFailed, }; }, components: { UserOutlined, LockOutlined, }, }); </script> <style> .login-container{ position: absolute; left: 0; right: 0; top: 0; bottom: 0; margin:auto; height: 600px; width: 500px; } </style>
代码以下:
<template> <Home /> <!-- <Login /> --> </template> <script> import Home from './components/Home.vue' // import Login from './components/Login.vue' export default { name: 'App', components: { Home, // Login } } </script> <style> </style>
在终端执行命令:
yarn serve
vue-router 官方文档 https://next.router.vuejs.org/zh/introduction.html
在终端执行命令:
yarn add vue-router@next
代码以下:
import { createApp } from 'vue' import App from './App.vue' import Antd from 'ant-design-vue'; import { createRouter, createWebHashHistory } from 'vue-router'; import 'ant-design-vue/dist/antd.css'; import Home from './components/Home.vue' import Login from './components/Login.vue' const routes = [ { path: '/', component: Home }, { path: '/login', component: Login }, ] // 建立路由实例并传递 `routes` 配置 // 你能够在这里输入更多的配置,但咱们在这里 // 暂时保持简单 const router = createRouter({ // 内部提供了 history 模式的实现。为了简单起见,咱们在这里使用 hash 模式。 history: createWebHashHistory(), routes, // `routes: routes` 的缩写 }) //建立并挂载根实例 //确保 _use_ 路由实例使 //整个应用支持路由。 createApp(App).use(Antd).use(router).mount('#app')
这里的
是最顶层的出口!上面路径匹配到的组件将会在此渲染
代码以下:
<template> <router-view></router-view> </template> <script> export default { name: 'App', } </script> <style> </style>
由于咱们在 setup 里面没有访问 this,因此咱们不能再直接访问 this.$router 或 this.$route。做为替代,咱们使用 useRouter 函数:
https://next.router.vuejs.org/zh/guide/advanced/composition-api.html
代码以下:
<script> import { UserOutlined, LockOutlined } from '@ant-design/icons-vue'; import { defineComponent, reactive } from 'vue'; import { useRouter } from 'vue-router' export default defineComponent({ setup() { const formState = reactive({ user: '', password: '', }); const router = useRouter() const handleFinish = values => { console.log(values, formState); router.push('/') }; const handleFinishFailed = errors => { console.log(errors); }; return { formState, handleFinish, handleFinishFailed, }; }, components: { UserOutlined, LockOutlined, }, }); </script>
在终端执行命令:
yarn serve
代码以下:
import { createApp } from 'vue' import App from './App.vue' import Antd from 'ant-design-vue'; import { createRouter, createWebHashHistory } from 'vue-router'; import 'ant-design-vue/dist/antd.css'; import Home from './views/Home.vue' import Login from './views/Login.vue' const routes = [ { path: '/', component: Home }, { path: '/login', component: Login }, ] // 建立路由实例并传递 `routes` 配置 // 你能够在这里输入更多的配置,但咱们在这里 // 暂时保持简单 const router = createRouter({ // 内部提供了 history 模式的实现。为了简单起见,咱们在这里使用 hash 模式。 history: createWebHashHistory(), routes, // `routes: routes` 的缩写 }) //建立并挂载根实例 //确保 _use_ 路由实例使 //整个应用支持路由。 createApp(App).use(Antd).use(router).mount('#app')
本文简单的建立了两个vue页面,而且初试了vue-router,让两个简单的页面可以实现跳转。在下一节的内容中将会进一步使用vue-router,更多vue-router内容能够查看 https://next.router.vuejs.org/zh/introduction.html
https://github.com/Impartsoft/Simple_Vue/tree/main/simple-vue 1.antd
Ant Design of Vue 官方文档 https://2x.antdv.com/docs/vue/getting-started-cn
vue-router 官方文档 https://next.router.vuejs.org/zh/introduction.html