vue.js 學習筆記

来源:https://www.cnblogs.com/Nobel/archive/2019/02/17/10391478.html
-Advertisement-
Play Games

[TOC] vue.js 學習筆記 前言 好! MVVM 和 MVC 架構 MVVM:M 是模型(數據),V是視圖(界面),VM是V和M的雙向協調者。 MVC:M 是模型,V是視圖,C是控制器(業務) vue使用了MVVM架構來設計框架。架構是說邏輯分層,框架是指具體的實現。很明顯VM的實現是這個框 ...


目錄

vue.js 學習筆記

前言

好!

MVVM 和 MVC 架構

  • MVVM:M 是模型(數據),V是視圖(界面),VM是V和M的雙向協調者。
  • MVC:M 是模型,V是視圖,C是控制器(業務)

vue使用了MVVM架構來設計框架。架構是說邏輯分層,框架是指具體的實現。很明顯VM的實現是這個框架的核心,也是最複雜的地方。從更大範圍上看,vue專註界面的實現,也就是MVC中的V層。因此,vue只是一個局部框架,傳統MVC中的模型和業務不是vue的範疇,需要自行設計。

Vue 對象

vm層:
el: 控制的區域
methods:{} 可用方法
watch:{} 監聽數據改變
router: 監聽路徑,實現頁面內路由
computed: 計算屬性。它監聽相關數據並求值
render: 渲染替換區域

Model層:
data:{} 數據
props:[] 標簽屬性。用於獲取標簽屬性值(只讀)

view層:

  • {{ }} 插值表達式,不提倡直接操控DOM
  • v-html 插html
  • v-text 插純文本
  • v-cloak 防閃爍
  • v-bind: 綁定屬性,縮寫:
  • v-model 表單雙向數據綁定
  • v-on: 綁定事件,縮寫@
    • .stop 停止事件冒泡
    • .prevent 禁止預設行為
    • .capture 捕獲內層事件
    • .self 只觸發自身事件
    • .once 只觸發一次事件
  • v-for 迴圈渲染,如v-for="item in xxx"
    • 需用:key保序,保證項對應關係
  • v-if 控制是否顯示(創建或移除html實體)
  • v-show 用樣式控制顯示

## 樣式

html class 樣式,可以通過{typeClassName:bool,...}的對象來引用對應名稱的樣式表進行綁定。

html style 內聯樣式通過{styleName:value,...}綁定。

過濾器

過濾器提供了文本格式化的功能,可用在插值表達式和v-bind:表達式內。

vm層:

//全局過濾器
Vue.filter("filterName",function (msg){})//filterName是過濾器的名字,msg是預設傳過來的字元串,也可添加其他參數。

//局部過濾器,定義在new Vue對象內
filters:{
    filterName:function(msg){}
}

View層:
{{ str | filterName}} 過濾器filterName對str進行處理。

鍵值修飾符

用於擴展鍵盤事件,可通過Vue.config.keyCodes自定義。

  • .enter 回車
  • .tab 製表符
  • .delete 刪除
  • .esc esc鍵
  • .sapce 空格
  • .up
  • .down
  • .left
  • .right

自定義指令

自定義指令對象包含以下鉤子函數(可選):

  • bind: 初始化
    • el 綁定函數的第一個參數,表示綁定的元素
    • binding 對象包含以下屬性:
      • name 指令名
      • value 綁定的值
      • oldValue 前一個值
      • expression 字元串值
      • arg 指令參數,如direct:arg的arg
      • modifiers 修飾符,如direct.mm.gg的mm和gg
    • vnode 虛擬節點
    • oldVnode 上一個虛擬節點
  • inserted: 插入父節點時(插入DOM中)
  • update: VNode更新時
  • componentUpdated: VNode和子節點全體更新時
  • unbind: 解綁時
//全局自定義指令directName
Vue.directive('directName',{
    bind:function(el){},
    inserted:function(el){},
    update:function(el){}
    })

//局部自定義指令,在new Vue對象內定義
driectives:{
    bind:function(el,binding,vnode,oldVnode){}
}

組件

定義UI模塊。

全局組件

寫法一

var comp= Vue.extend({template:`<h3>標題組件</h3>`})//定義html結構

Vue.component('myComp', comp)//註冊組件my-comp

寫法二

這種書寫方式可以有編輯器提供的語法提示。

Vue.component('myComp2',{template:'#tmp1'})
<template id="tmp1">
    <h3>標題組件2</h3>
</template>

局部組件

定義在Vue實例內:

components:{
    comp3:{
        template:'#temp2'
    }
} 

組件數據

定義方式:

Vue.component('comp4',{
    template:'<h3>{{msg}}</h3>',
    data:function(){
        return {
            msg:'標題數據'
        }
})

動態展示組件

<!-- 根據:is的值展示對應組件 -->
<component :is="'comp4'"></component>

傳遞數據到組件

props:[] 標簽屬性傳值
$emint() 標簽事件傳值

路由

前端路由通過網址後的#(錨點)來實現,該網址不會重新訪問後端伺服器。路由實現跳轉功能。

自動安裝

通過<script>標簽添加vue-router.js引用。

手動安裝

import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

路由匹配規則

var router = new VueRouter({
    //路由表
    routers:[
        //path 定義#號後的字元串
        //component 定義跳轉的目標組件
        //redirect 定義跳轉到另一個路徑
        {path:'/', redirect: '/home'},
        {path:'/home', component: home},
        {path:'/user', component: user}
    ]
})
<!-- 路由匹配的組件展示在下麵標簽的占位上 -->
<router-view></router-view>

<!-- 通過錨點改變路由 -->
<a href="#/home">簡介</a>
<!-- 通過router-link標簽改變路由 -->
<router-link to="/user">客戶</router-link>

傳遞參數

//訪問路由路徑的參數,如#/home?id=3 (/home)
$route.query.id //3

//路由匹配帶參數,如#/home/3 (/home/:id)
$route.params.id //3

子路徑

//定義路由路徑時,增加children定義子路徑
{path:'/home',component:home,
children:[
    {path:'n1', component: n1}
]}

命名視圖

//定義路由路徑時,修改跳轉目標為命名視圖
{path:'/home',components:{
    default:head,
    left:left,
    right:right
}}
<!-- 指定視圖名稱 -->
<router-view></router-view>
<router-view name="left"></router-view>
<router-view name="right"></router-view> 

DOM操作

$refs 在Vue實例中,保存了被ref指令標識的DOM屬性值。

Vue實例的生命周期

初始化階段

  1. new Vue()
  2. 初始化 Events、生命周期管理
  3. beforeCreate()
  4. 初始化 data、methods
  5. created()
  6. 根據el綁定編譯模板
  7. beforeMount()
  8. 替換頁面中對應的元素
  9. mounted()

運行階段

  1. 數據改變
  2. beforeUpdate()
  3. 更新頁面數據
  4. updated()

釋放階段

  1. 對象釋放程式執行
  2. beforeDestroy()
  3. 釋放事件監聽器等
  4. destroyed()

網路請求 get、post、jsonp

可用vue-resource包或axios包。

動畫

<transition></transition>標簽和css實現動畫。

全場動畫

  1. .v-enter-active 進入漸變過程
    1. .v-enter 開始進入狀態
    2. .v-enter-to 完結進入狀態
  2. v-leave-active 離開漸變過程
    1. v-leave 開始離開狀態
    2. v-leave-to 完結離開狀態

第三方庫:animate.css

半場動畫

通過事件實現。

  1. @before-enter 進入前
  2. @enter 進入
  3. @after-enter 進入後

組動畫

<transition-group tag=“ul”> 標簽實現列表動畫。

工具

nrm 鏡像地址選擇工具

npm i nrm -g #安裝nrm到全局包緩存
nrm ls #列出可用地址
nrm use cnpm #使用cnpm鏡像地址

webpack 前端自動化構建工具。
Gulp 基於任務來構建。
mint-ui 移動端界面組件庫。
mui 界面的代碼片段
bootstrap 界面代碼片段
vuex 共用組件數據

  1. state:{} 存儲數據 this.$store.state.***
  2. mutations:{} 修改數據的方法this.$store.commit("方法名稱", arg)
  3. getters:{} 獲取包裝後的數據this.$store.getters.***

vscode 插件

Vetur
Vue 2 Snippets

自動構建

webpack-dev-server 監聽項目變化,配置和運行webpack的工具
html-webpack-plugin 記憶體中生成html的插件
style-loader css載入器
css-loader css載入器
less-loader less載入器
sass-loader scss載入器
url-loader url載入器
file-loader 文件載入器
babel 高級語法轉低級語法
vue-loader .vue文件載入器

源代碼

.js .ts(typescript) .coffee .jsx

樣式

.css .sass .scss .less

模板文件

.ejs .jade .vue(webpack)

.vue 文件內容分三部分,實現vue組件:

  1. <template>
  2. <script>
  3. <style>

項目結構

  • src/
    • main.js
    • index.html
    • js/
    • images/
    • css/
  • dist/
  • node_modules/
  • package.json
  • webpack.config.js

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 事務隔離級別本質 在資料庫管理系統中,事務保證了一個操作序列可以全部執行或全部不執行(原子性),從一個狀態轉變到另外一個狀態(一致性)。由於事務滿足持久性,所以一旦事務被提交之後,數據就能夠被持久化下來,又因為事務是滿足隔離性的,所以,當多個事務同時處理同一個數據的時候,多個事務之間是互不影響的,所 ...
  • SQL 高級查詢 前面我們寫了一下 SQL 的極簡入門,今天來說點高級查詢。沒看到的朋友可以點擊下麵鏈接查看。 "1 小時 SQL 極速入門(一)" "1 小時 SQL 極速入門(二)" "1 小時 SQL 極速入門(三)" 層次化查詢 層次化結構可以理解為樹狀數據結構,由節點構成。比如常見的組織結 ...
  • 1、學習工作相關 1.1 Windows "圖片壓縮Tinyjpg" :解決應用圖片資源過大的問題,可以先將圖片進行碼轉換,可以有效降低資源占用率。 "清華大學鏡像源" "MSDN微軟系統下載" 1.2 Apple iPhone支持SDK(Xcode調製專用) 鏈接:https://pan.baid ...
  • import React from 'react'; import _ from 'lodash'; import styles from './iconPicker.less'; const requireContext = require.context('annotation/draw/svg ...
  • html代碼: css代碼: #demo div{ color: #3a3a3a; font-size: .34rem; line-height: .8rem; } #demo div span{ color: #f65c53; } js代碼: <script> var speed = 40 var ...
  • 小程式生命周期 是指程式從創建、到開始、暫停、喚起、暫停、卸載的過程 小程式生命周期可以從三個方面介紹 應用生命周期 頁面Page生命周期 應用生命周期會影響Page生命周期 小程式一個路由跳轉的 API也會影響到 Page頁面的聲明周期 小程式應用生命周期 用戶首次打開小程式,會先觸發 初始化 其 ...
  • 從 13 年專科畢業開始,一路跌跌撞撞走了很多彎路,做過餐廳服務員,進過工廠乾過流水線,做過客服,乾過電話銷售可以說經歷相當的“豐富”。 最後的機緣巧合下,走上了前端開發之路,作為一個非電腦專業且低學歷的人來說,自學編程其實不是件容易的事情,不過慶幸的是自己堅持下來了。 目前工作還算不錯,收入在目 ...
  • 使用jquery獲取url上的參數(筆記) 一、做作業時經常要獲取url上的參數 1、當url上有多個參數時 從互聯網找到了一個方法 使用方法: 2、當url上只有一個參數 直接獲取url後面的字元,然後剪切掉不需要的部分 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...