土家陈祠坊咸菜 發表於 2022-9-21 11:17:00

vue3+vite+typescript

<p>1.创建项目</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">npm init vite@latest &lt;project-name&gt;&nbsp;</span><br><span style="color: rgba(0, 128, 0, 1)"># or</span><br><span style="color: rgba(0, 128, 0, 1)"><code><span class="token function">npm init vite-app hello-vue3 <span class="token comment"> <br># or <br>yarn create vite-app hello-vue3</span></span></code></span></pre>
</div>
<p>2. 配置端口号 以及配置别名,解决vue中 引入ref..的插件</p>
<div class="cnblogs_code">
<div><span style="color: rgba(0, 128, 0, 1)">配置端口号+配置代理:</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">打开 vite.config.ts 文件:</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; 添加server就可以了</span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr">&nbsp; server: {</span></span></span><span style="color: rgba(0, 128, 0, 1)">&nbsp;&nbsp;</span></div>
<div>
<div>&nbsp; &nbsp;<span style="color: rgba(0, 128, 0, 1)"> &nbsp;host: '0.0.0.0',</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;port: 8080,</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;open: true,</span></div>
</div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr">&nbsp; &nbsp; &nbsp;proxy: { </span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string">&nbsp; &nbsp; &nbsp; &nbsp;'/api': { </span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;target: <span class="hljs-string">"http://localhost:3000", </span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;changeOrigin: <span class="hljs-literal">true, </span></span></span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pathRewrite: { </span></span></span></span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-string">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'^/api': <span class="hljs-string">'/api' </span></span></span></span></span></span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-string">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} </span></span></span></span></span></span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-string">&nbsp; &nbsp; &nbsp; &nbsp; } </span></span></span></span></span></span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-string">&nbsp; &nbsp; &nbsp;}, </span></span></span></span></span></span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-string">&nbsp; }</span></span></span></span></span></span></span></span></span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)">配置别名:</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; 在vite.config.ts文件中引入:</span><br><span class="hljs-keyword" style="color: rgba(0, 128, 0, 1)">&nbsp; const path = <span class="hljs-built_in">require(<span class="hljs-string">'path');</span></span></span></div>
<div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; resolve: {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; alias: {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span class="hljs-string">'@': path.<span class="hljs-title function_">resolve(__dirname, <span class="hljs-string">'./src'),</span></span></span></span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; }</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; }</span></div>
<div>&nbsp;</div>
<div><span style="color: rgba(0, 128, 0, 1)">下载插件 npm i unplugin-<span class="hljs-keyword">auto-<span class="hljs-keyword">import -D</span></span></span></div>
<div><span class="hljs-comment" style="color: rgba(0, 128, 0, 1)">引入插件 <span class="hljs-keyword">import <span class="hljs-title class_">AutoImport <span class="hljs-keyword">from <span class="hljs-string">'unplugin-auto-import/vite'; //&nbsp;setup语法糖插件&nbsp;:&nbsp;解决import&nbsp;{&nbsp;ref&nbsp;,&nbsp;reactive&nbsp;...&nbsp;}&nbsp;引入的问题</span></span></span></span></span></div>
<div><span class="hljs-comment" style="color: rgba(0, 128, 0, 1)"><span class="hljs-keyword"><span class="hljs-title class_"><span class="hljs-keyword"><span class="hljs-string">配置:&nbsp;</span></span></span></span></span></div>
<div><span class="hljs-comment" style="color: rgba(0, 128, 0, 1)"><span class="hljs-keyword"><span class="hljs-title class_"><span class="hljs-keyword"><span class="hljs-string">&nbsp; &nbsp;&nbsp;<span class="hljs-keyword">import vue <span class="hljs-keyword">from <span class="hljs-string">'@vitejs/plugin-vue';</span></span></span></span></span></span></span></span></div>
<div><span class="hljs-comment" style="color: rgba(0, 128, 0, 1)"><span class="hljs-keyword"><span class="hljs-title class_"><span class="hljs-keyword"><span class="hljs-string">&nbsp; &nbsp;&nbsp;<span class="hljs-attr">plugins: [ <span class="hljs-title function_">vue(),</span></span></span></span></span></span></span></div>
<div><span class="hljs-comment" style="color: rgba(0, 128, 0, 1)"><span class="hljs-keyword"><span class="hljs-title class_"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-title function_"><span class="hljs-comment">&nbsp; &nbsp; &nbsp;//配置插件 </span></span></span></span></span></span></span></span></div>
<div><span class="hljs-comment" style="color: rgba(0, 128, 0, 1)"><span class="hljs-keyword"><span class="hljs-title class_"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-title class_">&nbsp; &nbsp; &nbsp;AutoImport({ <span class="hljs-attr">imports:[<span class="hljs-string">'vue',<span class="hljs-string">'vue-router'] }) </span></span></span></span></span></span></span></span></span></span></span></span></div>
<div><span class="hljs-comment" style="color: rgba(0, 128, 0, 1)"><span class="hljs-keyword"><span class="hljs-title class_"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-title function_"><span class="hljs-comment"><span class="hljs-title class_"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-string">&nbsp; &nbsp; ],</span></span></span></span></span></span></span></span></span></span></span></span></div>
</div>
</div>
<p>3. 安装路由</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">npm install vue-<span class="hljs-symbol">router@<span class="hljs-number">4 -S<br><br></span></span></span><span style="color: rgba(0, 128, 0, 1)">创建router文件夹并建index.js文件:<br><span class="hljs-keyword">import { createRouter, createWebHistory } <span class="hljs-keyword">from <span class="hljs-string">"vue-router"; <br><span class="hljs-keyword">import <span class="hljs-title class_">Home <span class="hljs-keyword">from <span class="hljs-string">"../views/Home.vue"; <br><span class="hljs-keyword">const routes = [ <br>{ <span class="hljs-attr">path: <span class="hljs-string">"/", <span class="hljs-attr">name: <span class="hljs-string">"Home", <span class="hljs-attr">component: <span class="hljs-title class_">Home, }, <br>{ <br><span class="hljs-attr">    path: <span class="hljs-string">"/about", <br><span class="hljs-attr">    name: <span class="hljs-string">"About", <br><span class="hljs-attr">    component: <span class="hljs-function">() =&gt; <br><span class="hljs-title function_">    import(<span class="hljs-comment">/* webpackChunkName: "about" */ <span class="hljs-string">"../views/About.vue"), <br>}, <br>]; <br><span class="hljs-keyword">const router = <span class="hljs-title function_">createRouter({ <br><span class="hljs-attr">history: <span class="hljs-title function_">createWebHistory(), <br>routes,<br>}); <br><span class="hljs-keyword">export <span class="hljs-keyword">default router;<br><br></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>main.js文件中引入 router 文件并挂载router即可。<br>例如:<br>      <span class="hljs-keyword">import router <span class="hljs-keyword">from <span class="hljs-string">"./router"; <br>      createApp(App).use(router).mount(<span class="hljs-string">'#app')</span></span></span></span></span></pre>
</div>
<p>4.vscode安装插件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">在 vscode 编辑器中安装vue3扩展:<br>  禁用 vetur 插件<br>  安装 vue language features(volar) 插件<br>  安装 element ui snippets 插件</span></pre>
</div>
<p>5.安装Pinia</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">安装下载:</span><br><span style="color: rgba(0, 128, 0, 1)">   yarn <span class="hljs-keyword">add pinia <br>   or<br><span class="hljs-meta">   npm install pinia<br>main.js文件引入:<br></span></span></span></pre>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;import store from './store'</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;并use store即可。</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp;新建store文件夹,然后创建index.js文件:</span></div>
<div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;import {createPinia} from 'pinia';</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;import piniaPluginPersist from 'pinia-plugin-persist'; //这个插件是用来做持久化存储的</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;const store = createPinia();</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;store.use(piniaPluginPersist);</span></div>
<br>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp;export default store;</span></div>
<div>&nbsp;</div>
<div>&nbsp; <span style="color: rgba(0, 128, 0, 1)">开始使用,例如创建一个user.js文件:</span></div>
<div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; import {defineStore} from 'pinia';</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; export const useUserStore = defineStore({</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; id: 'user',</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; state:()=&gt;{</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; return {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; token: ''</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; },</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; getters: {}, //这个跟vuex作用是差不多一样</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; actions: {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; setToken(token){</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.token = token;</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; }</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; },</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; persist:{</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; enabled: true,</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; strategies: [{</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; key: '这里是存储的名字,可以自定义,例如 user_data',</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; storage: localStorage,</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paths: [], //通过&nbsp;paths&nbsp;指定要长久化的字段,其余的则不会进行长久化。</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; }]</span></div>
<div>&nbsp; &nbsp;<span style="color: rgba(0, 128, 0, 1)"> }</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; })</span></div>
<div>&nbsp;</div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; 使用方式:</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; 在需要store的文件中引入对应的js文件即可,例如:</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; login.vue:</span>
<div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; import { useUserStore } from '@/store/user'</span></div>
<div>&nbsp; &nbsp;<span style="color: rgba(0, 128, 0, 1)"> const userStore = useUserStore();&nbsp;</span> &nbsp;<span style="color: rgba(255, 0, 0, 1)">// 注意这里也可以引入 storeToRefs 方法,然后进行解构,storeToRefs方法是pinia里面的,所以是从pinia中引入。</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; //登录方法中调用存储token的方法</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; login(){</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp;//假设这里获取到了用户token,然后需要存储token</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp;let token = 'xx';</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp;useUserStore.setToken(token);</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; }</span></div>
<div>&nbsp;</div>
<div><span style="color: rgba(0, 128, 0, 1)">注意事项:</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; 1.Pinia不需要像Vuex一样使用modules分模块,Pinia可在store目录中直接定义对应模块就可以了。</span></div>
<div>&nbsp;</div>
<div><span style="color: rgba(0, 128, 0, 1)"><span style="color: rgba(0, 128, 0, 1)">pinia与vuex区别:<br></span></span><ol>
<li><span style="color: rgba(0, 128, 0, 1)">支持选项式api和组合式api写法</span></li>
<li><span style="color: rgba(0, 128, 0, 1)">pinia没有mutations,只有:state、getters、actions</span></li>
<li><span style="color: rgba(0, 128, 0, 1)">pinia分模块不需要modules(之前vuex分模块需要modules)</span></li>
<li><span style="color: rgba(0, 128, 0, 1)">TypeScript支持很好</span></li>
<li><span style="color: rgba(0, 128, 0, 1)">自动化代码拆分</span></li>
<li><span style="color: rgba(0, 128, 0, 1)">pinia体积更小(性能更好)</span></li>
</ol></div>
</div>
</div>

</div>
</div>
</div>
<p>6.安装eslint以及css预处理器sass安装</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">1. ts中使用 @ 符号引入, 需要在tsconfig.json文件中进行配置<br>   skipLibCheck: true<br><br>   "exclude": ["node_modules"]<br><br>2.安装eslint<br>npm install --save-dev eslint eslint-plugin-vue<br><br>3.创建 .eslintrc.js 文件<br></span></pre>
<div>
<div>&nbsp; <span style="color: rgba(0, 128, 0, 1)">&nbsp; module.exports = {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   root: true,</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   parseOptions: {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp;   sourceType: 'module'</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   },</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   parser: 'vue-eslint-parser',</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   extends: [</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'plugin:vue/vue3-essential',</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'plugin:vue/vue3-strongly-recommended',</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'plugin:vue/vue3-recommended'</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   ],</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   env: {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; browser: true,</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; node: true,</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; es6: true,</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   },</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   rules: {</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'no-console': 'off',</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'comma-dangle': </span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;   }</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp; }</span></div>
</div>
<pre><br><span style="color: rgba(0, 128, 0, 1)">安装sass:</span><br><span style="color: rgba(0, 128, 0, 1)">npm install -D sass sass-loader</span></pre>
</div>
<p>7. 安装 element-plus</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">npm install element-plus --save<br><br>然后再 main.ts 文件中引入</span></pre>
<div>
<div><span style="color: rgba(0, 128, 0, 1)">  import ElementPlus from 'element-plus'</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">  import 'element-plus/dist/index.css'</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp;</span></div>
<div><span style="color: rgba(0, 128, 0, 1)">&nbsp; &nbsp;app.use(ElementPlus) 即可;</span></div>
</div>
</div>
<p>8.vue3语法</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">setup 语法糖中,组件的使用方式:<br>   引入的组件可以直接使用,无需再通过components进行注册,并且无法指定当前组件的名字,他会自动以文件名为主,不用再写name属性了。<br><br>ref使用:<br>   定义: const xxx = ref('xx');<br>   作用: 定义一个响应式的数据。<br>   js中操作,需要使用 xxx.value;<br>   模板中使用不需要 .value;</span></pre>
</div>
<p>&nbsp;9. 兄弟组件bus.js传值</p>
<div class="cnblogs_code">
<p><span style="color: rgba(0, 128, 0, 1)">新建一个Bus.js来用于兄弟之间传值。</span></p>
<p><span style="color: rgba(0, 128, 0, 1)">Bus.js文件:</span></p>
<pre><span style="color: rgba(0, 128, 0, 1)"><code class="hljs language-javascript"><span class="hljs-keyword">import <span class="hljs-title class_">Vue <span class="hljs-keyword">from <span class="hljs-string">'vue';
<span class="hljs-keyword">export <span class="hljs-keyword">default <span class="hljs-keyword">new <span class="hljs-title class_">Vue;</span></span></span></span></span></span></span></span></code></span></pre>
<p><span style="color: rgba(0, 128, 0, 1)">通过bus.$emit("事件名称”,data)&nbsp;发送</span></p>
<p><span style="color: rgba(0, 128, 0, 1)">通过bus.$on("事件名称",(data)=&gt;{</span></p>
<p><span style="color: rgba(0, 128, 0, 1)">&nbsp; this.&nbsp;data&nbsp;=&nbsp;data&nbsp;</span></p>
<p><span style="color: rgba(0, 128, 0, 1)">})接收</span></p>
</div>
<p>10.axios二次封装以及api解耦</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">下载安装axios: npm install axios -S<br>新建utils/request.js:<br><span class="hljs-keyword">import axios <span class="hljs-keyword">from <span class="hljs-string">'axios'; <br><span class="hljs-comment">//1. 创建axios对象 <br><span class="hljs-keyword">const service = axios.<span class="hljs-title function_">create({<br>   <span class="hljs-attr">baseURL: <span class="hljs-keyword">import.<span class="hljs-property">meta.<span class="hljs-property">env.<span class="hljs-property">VITE_BASE_URL,<br></span></span></span></span></span>   timeout: 5000<br>}); <br><span class="hljs-comment">//2. 请求拦截器 <br>service.<span class="hljs-property">interceptors.<span class="hljs-property">request.<span class="hljs-title function_">use(<span class="hljs-function"><span class="hljs-params">config =&gt; { <br><span class="hljs-keyword">    return config; <br>}, <span class="hljs-function"><span class="hljs-params">error =&gt; { <br><span class="hljs-title class_">    Promise.<span class="hljs-title function_">reject(error); <br>});<br>   <span class="hljs-comment">//3. 响应拦截器 <br>   service.<span class="hljs-property">interceptors.<span class="hljs-property">response.<span class="hljs-title function_">use(<span class="hljs-function"><span class="hljs-params">response =&gt; { <br><span class="hljs-comment">   //判断code码 <br><span class="hljs-keyword">    return response.<span class="hljs-property">data; <br>   },<span class="hljs-function"><span class="hljs-params">error =&gt; { <br><span class="hljs-keyword">    return <span class="hljs-title class_">Promise.<span class="hljs-title function_">reject(error); <br>}); <br><span class="hljs-keyword">export <span class="hljs-keyword">default service;<br><br>api解耦文件:<br>创建api文件:<br><span class="hljs-keyword">import request <span class="hljs-keyword">from <span class="hljs-string">'@/utils/request' <br><span class="hljs-keyword">export <span class="hljs-keyword">function <span class="hljs-title function_">testApi(<span class="hljs-params"> data ){ <br><span class="hljs-keyword">   return <span class="hljs-title function_">request({ <br><span class="hljs-attr">      url:<span class="hljs-string">'/api/xxx', <br><span class="hljs-attr">      method:<span class="hljs-string">"post", <br>      data <br>   }) <br>}</span></span></span></span></span></span></span></span></span></span></span></span></span><br></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
</div>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    如果快乐太难,那祝你平安。<br><br>
来源:https://www.cnblogs.com/sunnyeve/p/16577158.html
頁: [1]
查看完整版本: vue3+vite+typescript