1. 程式人生 > >Vue學習筆記-1

Vue學習筆記-1

前言

本文不是Vue.js的教程,只是一邊看官網Vue的教程文件一邊記錄並總結學習過程中遇到的一些問題和思考的筆記

1、vue和avalon一樣,都不支援VM初始時不存在的屬性

而在Angular裡是可以支援的,因為angular採用髒檢查的方式實現雙向繫結,vue和avalon都是採用setter和getter實現雙向繫結

例,如下程式碼在一秒後不會顯示出“xxcanghai”的字樣

<div id="app">
   <h1>{{obj.text}}</h1>
</div>

<script>
   var v = new Vue({
       el: '#app',
       data: {
           obj:{}
       }
   });
   setTimeout(function(){
       v.obj.text="xxcanghai";//無效
   },1000);
</script>

若給定初始值,則可生效,如下:

<div id="app">
   <h1>{{obj.text}}</h1>
</div>

<script>
   var v = new Vue({
       el: '#app',
       data: {
           obj:{
               text:"default Text" //給定初始值
           }
       }
   });
   setTimeout(function(){
       v.obj.text="xxcanghai";//有效
   },1000);
</script>

不過Vue其中比avalon好的一點是,Vue在只是對初始化時不存在的屬性賦值無效,但顯示是不會報錯的。而avalon則根本無法顯示,對於上述第一段程式碼執行都會報錯(不知道最新的avalon是否修改此問題)

好在vue中提供了$set方法來解決這種賦值失敗的問題,如下:

<div i<div id="app">
   <h1>{{obj.text}}</h1>
</div>

<script>
   var v = new Vue({
       el: '#app',
       data: {
           obj: {}
       }
   });
   setTimeout(function() {
       v.$set("obj.text", "xxcanghai");//有效
   }, 1000);
</script>

雖然這種採用字串來表示變數名的方式會導致無法使用強型別的預編譯檢查(TypeScript),但也至少算能解決問題吧。

2、input元素中屬性與v-model同時存在在以屬性為優先

如下程式碼:當文字框中的value屬性與v-model衝突時會以input的value屬性為優先,並覆蓋v-model的屬性
最終console.log輸出的也是“inputText”

<div id="app">
   <input type="text" v-model="a" value="inputText">
</div>
<script>
   var v = new Vue({
       el: '#app',
       data: {
           a: "vueText"
       }
   });
   console.log(v.a);//inputText
</script>

對於複選框型別的input上述結論也同樣適用,如下:

<div id="app">
   <input type="checkbox" v-model="isCheck" checked>
</div>
<script>
   var v = new Vue({
       el: '#app',
       data: {
           isCheck: false
       }
   });
   console.log(v.isCheck);//true
</script>

複選框的v-model設定為false不選中,同時設定checked屬性選中,最終效果為以checked屬性優先,複選框被選中,同時v.isCheck屬性被改寫為true。

3、VM中的函式放到data屬性和methods屬性中的區別,以及函式呼叫時帶括號與不帶括號的區別

  1. Vue在例項化的時候有一個特殊的屬性即methods,我看官方文件中把所有VM中的函式都放到methods屬性裡面,經測試把函式寫在data和methods中都可以正常執行,那麼兩者有何區別?
  2. 通過官方demo可知,在繫結函式的時候可以帶括號也可以不帶括號,對於有引數的函式那必須帶括號呼叫,但是對於無參函式帶括號呼叫與不帶括號呼叫的區別是什麼?
    以下測試:
<div id="app">
    <button @click="dataFn">1.dataFn</button> 
    <!--輸出:<button>,[MouseEvent]-->
    
    <button @click="dataFn()">2.dataFn()</button> 
    <!--輸出:Vue,[]-->
    
    <button @click="methodsFn">3.methodsFn</button> 
    <!--輸出:Vue,[MouseEvent]-->
    
    <button @click="methodsFn()">4.methodsFn()</button> 
    <!--輸出:Vue,[]-->
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            dataFn: function() {
                console.log(this,arguments);
            }
        },
        methods: {
            methodsFn: function() {
                console.log(this,arguments);
            }
        }
    });
    //[email protected]部落格園
</script>

通過上述程式碼對比可以得到以下結論:

  1. 若想要在事件響應函式中獲得Event物件,那麼事件繫結時不能加括號,參見上述1、3示例。
  2. 若想在函式中this指向Vue例項化物件,函式呼叫時應當加括號。同時,所有在methods屬性中的函式,無論如何呼叫,this都指向當前Vue例項化物件。
  3. 遂最終結論為:應當把所有VM中的函式都放在methods中,同時對於事件的繫結應當使用無括號方式。即上述示例3中為最優方案。

PS:當然你也可以使用vue內建的$event來顯示的傳遞event物件,以保證函式寫在任何位置都可以正常使用this和event。

<div id="app">
    <button @click="dataFn($event)">5.dataFn($event)</button> 
    <!--輸出:Vue,[MouseEvent]-->
    
    <button @click="methodsFn($event)">6.methodsFn($event)</button> 
    <!--輸出:Vue,[MouseEvent]-->
</div>

相關筆記

相關推薦

vue 學習筆記1

oca proxy script inpu bpa The 點擊 con resp 1、子組件在父組件的原生的事件例如一個child子組件的點擊事件<child @click="handleClick">點擊</child>這種情況在父組件中是不能觸

vue學習筆記1——vue相關概念:為什麼要用框架?框架與庫的區別、MVC與MVVM的概念

Vue是最火的一個框架,React是最流行的一個框架(React可以開發網站和手機app;Vue也是可以進行PC和APP端開發)   Vue、Angular、React並稱為前端三大框架,Vue只關注檢視層,並且便於和第三方庫進行整合。   1,為什麼要用框架?

Vue學習筆記-1

前言 本文不是Vue.js的教程,只是一邊看官網Vue的教程文件一邊記錄並總結學習過程中遇到的一些問題和思考的筆記。 1、vue和avalon一樣,都不支援VM初始時不存在的屬性 而在Angular裡是可以支援的,因為angular採用髒檢查的方式實現雙向繫結,vue和avalon都是採用setter和get

vue.js學習筆記1——安裝及創建並運行vue實例

log tip light js學習筆記 vue-cli project 作者 require 需求 vue安裝: $ npm install vue vue-cil安裝: $ npm install -g vue-cli 創建webpack實例: $

Vue學習筆記1)——在頁面右上角實現可懸浮/隱藏的系統選單

轉自榕樹島 本文不能算一個教程,而是記錄一隻Vue菜鳥踩坑心路歷程的筆記,對於正在踩坑的新手或許會有一點小幫助。作為第一篇正經八百的技術部落格,歡迎大家發表看法,關愛菜鳥,請輕拍 很久以後回來更一下,這個功能可以用Vuex輕鬆搞定,此文就當練習父子元件通訊了吧,emmm…… 原文: 這是個

Vue學習筆記重點(1

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>todo-list元件版</title> <script

avalonjs 學習筆記1---checkbox

nod item ack lex server ini npm 學習 define 一、vscode 安裝使用 1.vs code+node.js下載安裝 2.在node.js command prompt 中運行 npm install -g live-server 3

微信小程序學習筆記1

接口 spa class 搭建 name demo title 更新數據 navigate 初步接觸微信小程序開發 微信小程序的開發環境     微信小程序是運行在微信環境中的應用,它只能在微信中運行,不能運行在瀏覽器等其他環境中,微信團隊提供了專門開發工具用於小程

mysql學習筆記(1-安裝簡介)

配置文件 服務器 二進制 mysql 通用 mysql的安裝方式:(1)通過系統提供的默認版本(穩定版,該版本滿足了使用的需求,建議使用,os vendor)(2)mysql官方提供 官方提供的通用rpm安裝包 官方提供的文件,以文件覆蓋的方式安裝 源碼包編譯安裝

Python學習筆記1

bsp 面向對象 解釋型 基本 ges mon xxx str text 一、什麽是Python   Python是面向對象、解釋型的計算機語言;語法簡潔、優雅、易學。   在1989誕生,Guido(龜叔)開發。龜叔非常喜歡一部叫做《Monty Python飛行馬戲團》的

java 學習筆記1

跨平臺原理 所有 com 路徑 運行機制 main 單位 width rtu 、 高級語言運行機制 高級語言按程序的執行方式分為編譯型和解釋型兩種。 java語言比較特殊,Java程序的執行必須經過先編譯後解釋的步驟。 1 編譯生成字節碼,只面向JVM(.class) 2J

Java Web學習筆記-1

根路徑 text .get set 接口 context cat 方法 web應用 1.servlet理論上可以處理多種形式的請求響應形式 ,http只是其中之一 ,所以HttpServletRequest、 HttpServletResponse分別是ServletReq

Redis學習筆記1--入門篇

ase list ica cati ctu apple string replace first 一、Redis簡介: Redis(http://redis.io)是一款開源的、高性能的鍵-值存儲(key-value store),它是用ANSI C來編寫。Redis的項目

Python學習筆記1安裝概述_20170610

lin 教程 linu 學習筆記 python學習 版本 pyc module 選擇 python 的安裝概述: 安裝Python3.6,教程很多 需要安裝的module:(註意選擇版本)  numpy  scipy  matplotlib 以上,在Windows

深入理解 Java 虛擬機之學習筆記(1)

over 信息 hotspot 體系 ima 模塊化 介紹 style 創建 本書結構: 從宏觀的角度介紹了整個Java技術體系、Java和JVM的發展歷程、模塊化,以及JDK的編譯 講解了JVM的自動內存管理,包括虛擬機內存區域的劃分原理以及各種內存溢出異常產

MySql 基礎學習筆記 1——概述與基本數據類型: 整型: 1)TINYINT 2)SMALLINT 3) MEDIUMINT 4)INT 5)BIGINT 主要是大小的差別 圖 浮點型:命令

where float 函數名 src ron 編碼方式 永遠 -m mas 一、CMD中經常使用mysql相關命令 mysql -D, --database=name //打開數據庫 --delimiter=name //指定分隔符 -h, --host=na

機器學習筆記 1 LMS和梯度下降(批梯度下降) 20170617

temp eas 理解 import 樣本 alt mes show 超過 # 概念 LMS(least mean square):(最小均方法)通過最小化均方誤差來求最佳參數的方法。 GD(gradient descent) : (梯度下降法)一種參數更新法則。可以作為L

lua學習筆記1 環境配置

http windows 安裝完成 顯示 get 技術分享 開發平臺 org www 1 開發平臺 windows7 64位 2 下載鏈接 http://www.lua.org/download.html 3 安裝完成-環境配置 4 運行 WIN+R 運行

Gdb學習筆記1

help 什麽 follow class 使用 停止 -s 做什麽 font   其實,從很早就開始接觸gdb程序,gdb調試程序伴我成長,現在對其用法記錄以下:   當程序的運行結果和預期結果不一致,或者程序出現運行錯誤時,gdb就可以派上大用處了。調試的基本過程是:

tableau學習筆記1

類型 date pan 故事 功能介紹 -c images 數據 tps 第一部分 第一章 數據可視化   1.1 用數據講故事   1.2 數據不只是數字   1.3 在數據中尋找什麽(關系、模式、異常)  第二章 Tableau概述   2.1 Tableau概述