Vue的基本使用

2022-01-08 CppTeam

VUE是國人發明出來的一套用於構建用戶界面的前端框架。

相較於傳統開發具有以下特徵:

Vue.js 的核心是一個允許採用簡潔的模板語法來聲明式地將數據渲染進 DOM 的系統

1. 基本使用步驟

① 導入 vue.js 的 script 腳本文件

② 在頁面中聲明一個將要被 vue 所控制的 DOM 區域

③ 創建 vm 實例對象(vue 實例對象)

2.基本代碼與 MVVM 的對應關係

其中

2.1 Vue實例

每一個Vue應用的開始都是由 new vue開始的,然後由可選的嵌套、可復用的組件樹組成

在vue開發中,幾乎所有的組件都是一個Vue實例。

2.2 數據與方法

當vm實例創建好了之後,它將 data 對象中的所有的 property 加入到 Vue 的響應式系統中。當這些 property 的值發生改變時,視圖將會產生「響應」,即匹配更新為新的值。

// 我們的數據對象
var data = { a: 1 }

// 該對象被加入到一個 Vue 實例中
var vm = new Vue({
 data: data
})

// 獲得這個實例上的 property
// 返回源數據中對應的欄位
vm.a == data.a // => true

// 設置 property 也會影響到原始數據
vm.a = 2
data.a // => 2

// ……反之亦然
data.a = 3
vm.a // => 3

當這些數據改變時,視圖會進行重渲染。值得注意的是只有當實例被創建時就已經存在於 data 中的 property 才是響應式的。也就是說如果你添加一個新的 property,比如:

//在實例化之後
vm.b = '1';

這個b添加進去了但是vue不會在重新實例化一次,也就是說b不會想vue其他之前定義好的data一樣是響應式的。

如果有些值你將來會用到,你也得先定義在裡面。

data: {
 newTodoText: '',
 visitCount: 0,
 hideCompletedTodos: false,
 todos: [],
 error: null
}

這裡唯一的例外是使用 Object.freeze(),這會阻止修改現有的 property,也意味著響應系統無法再追蹤變化。

var obj = {
 foo: 'bar'
}

Object.freeze(obj)

new Vue({
 el: '#app',
 data: obj
})
<div id="app">
 <p>{{ foo }}</p>
 <!-- 這裡的 `foo` 不會更新! -->
 <button v-on:click="foo = 'baz'">Change it</button>
</div>

除了數據 property,Vue 實例還暴露了一些有用的實例 property 與方法。它們都有前綴 $,以便與用戶定義的 property 區分開來。例如:

var data = { a: 1 }
var vm = new Vue({
 el: '#example',
 data: data
})

vm.$data === data // => true
vm.$el === document.getElementById('example') // => true

// $watch 是一個實例方法
vm.$watch('a', function (newValue, oldValue) {
 // 這個回調將在 `vm.a` 改變後調用
})

小結

2.3實例生命周期鉤子

vue實例創建會經過很多初始化過程,這些過程都有相應的函數叫做生命周期鉤子可以幫助我們在不同階段添加自己的代碼去實現某種效果。

比如 created 鉤子可以用來在一個實例被創建之後執行代碼:

new Vue({
data: {
  a: 1
},
created: function () {
  // `this` 指向 vm 實例
  console.log('a is: ' + this.a)
}
})
// => "a is: 1"

也有一些其它的鉤子,在實例生命周期的不同階段被調用,如 mounted、updated和 destroyed。生命周期鉤子的 this 上下文指向調用它的 Vue 實例。

不要在選項 property 或回調上使用箭頭函數,比如 created: () => console.log(this.a) 或 vm.$watch('a', newValue => this.myMethod())。因為箭頭函數並沒有 this,this 會作為變量一直向上級詞法作用域查找,直至找到為止,經常導致 Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function 之類的錯誤。

生命周期圖示

下圖展示了實例的生命周期。你不需要立馬弄明白所有的東西,不過隨著你的不斷學習和使用,它的參考價值會越來越高。

這裡給了一些代碼可以讓大家了解vue的強大,以下代碼包含了vue的部分既簡單又重要的指令。

<!DOCTYPE html><html lang="en">
<head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>vue</title> <script src="../vue.js"></script></head>
<body> <div id="app"> {{message}} </div> <div id="app2"> <span :title="message"> 滑鼠放這裡給你看帥哥! </span> </div> <div id="app3"> <p v-if='seen'>被看到了</p> <button @click="gun">滾</button> </div> <div id="app4"> <ol> <li v-for="item in items">{{item.text}} </li> </ol> </div> <div id="app5"> <input type="text" v-model="message"> <button v-on:click="reverseMessage">反轉消息</button> </div> <div id="app6"> <todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id"></todo-item> </div>
<body> <script> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }) var app2 = new Vue({ el: '#app2', data: { message: ' xwt,time is ' + new Date().toLocaleString() } }) var app3 = new Vue({ el: '#app3', data: { seen: true }, methods: { gun() { if (this.seen === true) this.seen = false; else this.seen = true; } } }) var app4 = new Vue({ el: '#app4', data: { items: [{ id: 1, text: 'xwt很帥' }, { id: 2, text: 'xwt很聰明' }, { id: 3, text: 'xwt很強大' }] } }) var app5 = new Vue({ el: '#app5', data: { message: 'Hello Vue.js!' }, methods: { reverseMessage: function() { this.message = this.message.split('').reverse().join('') } } }) Vue.component('todo-item', { props: ['todo'], template: '<li>{{ todo.text }}</li>' }) var app6 = new Vue({ el: '#app6', data: { groceryList: [{ id: 0, text: '蔬菜' }, { id: 1, text: '奶酪' }, { id: 2, text: '隨便其它什麼人吃的東西' }] }
}) </script>
</body>
</html>

以上是自己在閱讀vue官方文檔學習時記錄的筆記,大多是文檔的例子和知識,如果對vue感興趣的且有一定三大件基礎的同學可以自行去官網學習。

這裡給出地址:https://cn.vuejs.org/v2/guide/

相關焦點

  • Vue3.0--Vue Composition API使用體驗
    ,需要通過安裝@vue/composition-api來使用:npm install @vue/composition-api...vue add vue-next然後就會自動安裝vue-cli-plugin-vue-next[5]插件,完畢之後,myapp項目就會變成一個基於Vue3.0Beta版本的項目框架。
  • vue 使用 vue-pdf 實現pdf在線預覽
    本篇筆記循序漸進,從基礎的demo,到一個可用的程度,文末列出了大家在實際使用的過程中可能會遇到的問題和解決方案。安裝:這個沒有啥背景知識可講,我們直接跳到安裝環節,vue-pdf 和其他vue組件的安裝並無不同,打開命令行,敲入:npm install --save vue-pdf注意路徑。
  • 使用electron+vue開發一個跨平臺todolist(便籤)桌面應用
    點擊上方藍字"小黑在哪裡"關注我吧# 1最近一直在使用electron
  • 如何創建vue項目並使用element框架中的el-select
    1、在電腦硬碟上,找到一個位置,新建一個文件夾wmn;滑鼠右鍵選擇Git Bash Here,並在Git窗口輸入cnpm install --global vue-cli命令:cnpm install --global vue-cli
  • vue的$nextTick的使用+源碼分析
    開始前,我覺得我們需要先弄清楚vue的$nextTick是幹什麼用的,它的存在是為了解決什麼問題?大家也可以自問一下。nextTick英文翻譯過來「下一個記號或者標記」,我覺得這裡應該用狀態來描述更加合理一些。
  • Vue.js 使用 form 表單,按下 Enter 或 Submit 按鈕阻止跳轉頁面/在其他 js 文件調用Vue 擴展方法
    Vue.js 使用 form 表單,按下 Enter 或 Submit 按鈕阻止跳轉頁面添加 .prevent 事件修飾符即可阻止跳轉https://cn.vuejs.org/v2/guide/events.html#事件修飾符使用 form 的好處還有一點就是,在 input 按下回車(Enter)即可提交表單<!
  • 一張圖教你快速玩轉vue-cli3
    對於普通的 npm 包而言,我們仍然可以(根據所選的 npm 包)使用包管理器。useBuiltIns: 'entry' 然後在入口文件添加 import '@babel/polyfill',這種方式的問題就是會增加包的大小3.配置scss/stylus共享全局變量對與scss,可以使用如下方式開啟:// vue.config.js
  • 準備將您的Vue應用遷移到Vue 3
    例如:// helper/filter.jsexportfunctiontoCurrency (value) {return`$${value.toFixed(2)}`}然後,您可以將輔助函數導入到需要使用它的組件中。例如:// price-component.vueimport { toCurrency } from'.
  • 技術分享:vue 過濾器
    vue 過濾器 1 關於 vue 過濾器 在vue1.0的時候其實是內置了過濾器的,但是考慮到好多過濾器並不一定會被開發所調用,所以把原本內置的過濾器就給去掉了,但是過濾器還是比較普遍的,所以我們從vue2.0之後就需要自己定義過濾器
  • 使用 Vue.js 和 Semantic-UI 做一個簡單的願望清單
    二、Vue.js介紹官方文檔傳送門:https://cn.vuejs.org/v2/guide/installation.htmlVue (讀音 /vjuː/,類似於 view) 是一套用於構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。
  • 使用 vue 實現一個電子籤名組件
    本文轉載於 SegmentFault 社區作者:我的小熊不見了
  • Vue框架之生命周期鉤子
    vue中三大常用屬性的小結、生命周期鉤子的了解,以及指令的初步接觸。指令有點多,只能留到明天繼續補全了。一、回顧與生命周期補充說明三大屬性,當然vue肯定不止這些,只不過時間有限,只學下最常見的。1回顧每次new一個Vue實例都需要關聯模板,Vue會基於此模板進行視圖渲染。
  • vue 和 微信小程序的區別
    寫了vue項目和小程序,發現二者有許多相同之處,在此想總結一下二者的共同點和區別。Part1生命周期先貼兩張圖:vue生命周期小程序生命周期數據請求在頁面加載請求數據時,兩者鉤子的使用有些類似,vue一般會在created或者mounted中請求數據,而在小程序,會在onLoad或者onShow中請求數據。
  • vue 渲染函數插槽專題及常見問題 - CSDN
    // app.vue 在開始和結束frame標記之間的內容將插入到插槽所在的frame組件中,替換slot標記。這是最基本的方法。還可以簡單地通過填充指定要放入槽中的默認內容// frame.vue所以現在如果我們這樣使用它:// app.vue「如果這裡沒有指定任何內容,這就是默認內容」是默認內容,但是如果像以前那樣使用它,默認文本將被img標記覆蓋。
  • Vue中directive自定義指令
    想必大家在使用Vue的時候,會經常用的Vue的一些指令。比如v-model、v-on、v-bind、v-if、v-else-if、v-for、v-show、v-slot等。那麼,大家有沒有遇到這些指令不能滿足需求的時候,自己嘗試自定義指令呢?
  • 這幾款基於 vue3 和 vite 的開箱即用的中後臺管理模版,讓你 yyds !
    Vue vben adminVue Vben Admin 是一個免費開源的中後臺模版。> 等多框架支持的中臺前端解決方案,ui 使用 antd 實現的,它使用了最新的前端技術棧,內置了 i18 國際化解決方案,動態路由,響應式設計,開箱即用,而且我們寫了很多支持 vue3 的插件和庫,它可以幫助你快速搭建企業級中後臺產品原型,不管你是
  • Vue 3 生命周期完整指南
    在選項API中使用 Vue 生命周期鉤子使用 選項API,生命周期鉤子是被暴露 Vue實例上的選項。我們不需要導入任何東西,只需要調用這個方法並為這個生命周期鉤子編寫代碼。使用事例:// 組合 API<script>import { onMounted } from 'vue'export default {   setup () {     onMounted(() => {
  • Vue 生命周期鉤子完整指南
    在Options API中,我們可以使用this.$el來訪問DOM,而在Composition API中,我們需要使用refs來訪問Vue生命周期鉤子中的DOM。下面是一些同時使用beforeUpdate和updated的入門代碼。
  • Vue標籤
    <script> var vm=new Vue({ el:"#app", data:{ "str1":"aa", "str2":"bb", "str3":"cc" } });</script>在vue
  • 史上最全 Vue 前端代碼風格指南
    components/|- MyComponent.vue複製代碼1.2.2 單例組件名只擁有單個活躍實例的組件應該以 The 前綴命名,以示其唯一性。這不意味著組件只可用於一個單頁面,而是_每個頁面_只使用一次。