天天看點

vue引入link_Vue實戰項目-money記賬器

一、money記賬項目-Vue-項目搭建

1.利用@Vue/cli建立項目
  • vue create money(項目名稱可更改)
  • cd money
  • yarn serve

這個項目的完整配置:

vue引入link_Vue實戰項目-money記賬器

這時候我們就基于Vue建立出來了一個項目

項目目錄說明:
vue引入link_Vue實戰項目-money記賬器
插件推薦(vscode):Vetur、VSCode Snippets(其他快捷鍵看插件說明)

在一個建立檔案中輸入:vbase+Tab可快速建立:

<template>
    <div>

    </div>
</template>

<script>
    export default {
        
    }
</script>

<style  scoped>

</style>
           
import alias:

ts/js可通過 @/目錄名 引入檔案

css/scss可通過 [email protected]/目錄名 引入檔案

例如:

ts/js:

import Types from '../components/Moneys/Types.vue';
//引入需要自己計算路徑引入
import Types from '@/components/Moneys/Types.vue';
//@代表src目錄,不用計算路徑
           

css/scss:

@import "[email protected]/assets/style/helper.scss";
@import "[email protected]/assets/style/reset.scss";
//前面要加[email protected]
           

這都是Vue配置好的,我們不需要自己配置

二、money記賬項目-Vue-導航欄

  • 先确定頁面的url

#money 記賬

#labels 标簽

#statistics 統計

預設進入首頁Money頁面

添加一個404頁面

  • 在views中建立4個頁面
vue引入link_Vue實戰項目-money記賬器
  • 在router.ts中配置路由
const routes:  = [
  {
    path: '/',
   redirect:'/money'
  },
  {
    path:'/money',
    component:Money
  },
  {
    path: '/labels',
    component: Labels
  },
  {
    path:'/statistics',
    component: Statistics
  },
  {
    path:'*',//*表示除了上面的路徑,其他的全是404頁面
    component:NotFound
  }
]
           
  • 在app.vue設定路徑和占位符
<router-link to="/money" >記賬</router-link>
<router-link to="/labels" >标簽</router-link>
<router-link to="/statistics" >統計</router-link>
<router-view />
           

這時候我們可以

通過不同的路徑來通路不同的頁面

了。但是我們有4個頁面,并不是所有頁面都需要這個導航欄Nav的,

404頁面就不需要導航欄

。是以把導航欄Nav寫在app元件中不妥,要把導航欄Nav元件做成全局元件,

哪個頁面需要,哪個頁面就自己引用
  • 在components中建立元件Nav
<template>
<div>
    <div id="nav">
        <router-link to="/money" 記賬</router-link>
        <router-link to="/labels" 标簽</router-link>
        <router-link to="/statistics" 統計</router-link>
    </div>
</div>
</template>
           
  • 在main.ts中将其做成全局元件
import Nav from '@/components/Nav.vue'

Vue.component("Nav",Nav)
           

哪個頁面需要直接引入<Nav />即可

這時候我們Money頁面,Labels頁面,Statistics頁面裡面有差不多相同的代碼:

Money頁面為例:

<div>
   <div >
      money
   </div>
   <Nav />
</div>
           

這時候就要想我與重複不共戴天,

  • 是以我們需要在components再建立一個頁面Layout:
<div>
   <div >
      <slot />//占位插槽
   </div>
   <Nav />
</div>
           
  • 隻需在三個頁面中引入Layout元件,然後把内容傳入插槽即可:
<Layout>
    <p>money</p>
</Layout>
           
  • 引入Icon圖示(svg-sprite-loader)

1.在Iconfont-阿裡巴巴矢量圖示庫中尋找圖示,下載下傳為svg格式。

2.在assets中建立一個檔案夾icon,把圖示放進去(svg其實就是一個xml)

3.在Nav元件中引入圖示:import x from ‘@assets/icon/label.svg’

這是會有報錯,下面标有紅線,這是我們根據報錯搜尋:typescript svg cannot find module

第一個就是複制代碼

declare module "*.svg" {
  const content: any;
  export default content;
}
           

放入shims-vue.d.ts檔案即可

4.将x列印出來,是一個路徑,這不是我們想要的,我們想得到一個svg use的使用方法,這時候我們需要一個loader(svg-sprite-loader)

5.安裝loader:yarn add --dev svg-sprite-loader

6.進行配置,在vue.config.js裡面

const 
           

7.元件引用:建立Icon元件:

<
           

8.Nav元件頁面引用:

<
           

下面是css,自己做就可以了

9.更新meta viewport

public>index.html:

<
           
svg中的一個注意點:

svg 自帶 fill 問題

通過Vue(active-class="selected")可以使選中的導航欄變色,但是svg檔案裡面path标簽如果有fill屬性(fill="red"),那麼svg标簽預設就是紅色,不會因為Vue(active-class="selected")變色,這時候我們需要

加上一個loader(svgo-loader)

,寫在loader(svg-sprite-loader)後面即可,當然要先安裝loader:yarn add --dev svgo-loader

然後進行配置,在vue.config.js裡面:

/* eslint-disable */
           

三、money記賬項目-Vue-Money.vue元件

在Money.vue元件中寫html+css,正常寫法在寫html+css中需要注意和學習的東西:

1.input,label寫法:

推薦:

<label>
  <span>備注</span>
  <input type="text">
</label>
           

不推薦:

<label for="xxx"></label>
<input id = 'xxx' type="text">
           
2.css初始化:單獨寫在一個檔案(reset.scss)中,然後從APP.vue中引入
// reset.scss
* {
  margin: 0; padding: 0;
  box-sizing: border-box;
}

a{
  text-decoration: none;
  color:inherit;
}

// app.vue
@import "[email protected]/assets/style/reset.scss";
           
3.頁面字型設定
  • 建立helper.scss檔案(儲存變量),把變量都放到 helper.css 裡面。helper.css 這個檔案隻能放變量,函數和 mixin,最終會消失的東西
  • 在 google 搜尋 "fonts.css" ,直接複制代碼,變量聲明前面用$
  • 然後在App.vue中引用
// helper.scss
           
4.scss用法
  • 選擇器裡面
.tags {
  > .current {

  }
}
           
  • 選擇器本身
.tags {
  &.current {

  }
}
           

5. 按鈕字型樣式不會繼承

  • 在reset.scss中加入
button, input{
  font: inherit;
}
           
6.字的下劃線比字長
border-bottom: 1px solid;
padding: 0 4px;
           
7. 如果用了float
  • 父元素一定要用clearfix
.clearfix::after{
  content:'';
  display: block;
  clear:both;
}
           
  • 用scss的%,placeholder占位功能
// helper.scss
%clearfix{  //clearfix就是一個占位符,後面誰用他,誰就把他替換了
  &::after{
    content: '';
    clear: both;
    display: block;
  }
}
// 如何用
// money.vue
.buttons {
  @extend %clearfix;
}


//後面buttons調用他了,就相當于
buttons::after{
    content: '';
    clear: both;
    display: block;
}
           
8. 兩層内陰影的寫法
box-shadow: inset 0 -5px 5px -5px fade_out(black, 0.5),
inset 0 5px 5px -5px fade_out(black, 0.5);
           
9.子產品化
  • 堅持一個檔案查過150行就執行子產品化
  • 把html scss剪切的單獨.vue檔案,引入的時候寫
  • 最後把相關檔案放到一個檔案夾