摘要:如果沒有文件,則讀取文件夾下的或者。如果都都找不到,拋出錯誤。
JS表達式
函數(方法)調用表達式
test() //函數調用表達式
屬性調用表達式
var obj = {name:"wt"}; var arr = [123,"bai"]; obj.name //屬性調用表達式 arr[0] //屬性調用表達式
變量(常量)調用表達式
let name = "wutao"; name //變量調用表達式
字面量表達式
123 //數值字面量表達式 "wtao" //字符串字面量表達式 true //布爾字面量表達式 null //空表達式 undefined //未定義表達式 {name:"wt"} //對象字面量表達式 [123,true] //數組字面量表達式
算術表達式
a + 1 //算術表達式 b * 1 //算術表達式
三目表達式
conidion ? name : title模板語法
插值
// 語法: 雙大括號{{}} // 使用場景: 標簽內容處使用 // 單向數據綁定 // 支持JS表達式{{msg}}{{getContent()}}
插值 與 v-text 區別
兩者都是在標簽內容處插入內容,但v-text是全量插入,而插值更靈活,除了全量插入,還可以使用部分插入
推薦只要使用插值就可以了
指令
是模板語法重中之重,常用如下
v-text //使用插值替代 v-html v-show v-if //條件判斷 v-else v-else-if v-for //循環 v-on //綁定事件 v-bind //綁定屬性 v-model //雙向數據綁定 v-pre v-cloak v-once指令
屬性綁定
// 單向數據綁定 // 支持JS表達式 // 使用指令v-bind,需傳入標簽屬性作為參數,例如:v-bind:title=""xxx
出現上面的情況,屬性誰后誰顯示,原理是后面替代前面,如果title在:title后面,那單向數據綁定失效
如果是使用函數,必須后面加括號調用()
1、數值型 :title="123" 等同于 title="123" 2、布爾型 :title="true" 等同于 title="true" //false時,屬性消失 3、字符串 :title=""go"" 等同于 title="go" 4、對象 :title="{name:"wt"}" 等同于 title="[Object object]" 5、數組 :title="[123,true,"bb"]" 等同于 title="true,ok,123"
事件綁定
注意如果改為如下代碼,this將發生變化
所有函數(方法)的定義,強烈推薦放在methods里,不要定義到data里面
條件判斷渲染
// 單向數據綁定 // 支持JS表達式 //數字0 --> false //字符串0 ---> true
注意點:
1、對象和數組轉boolean都是true
2、空字符串轉boolean是false
3、null、underfined、NaN轉boolean是false
4、數值0是false
let arr = [] if(arr){ console.log("true"); } if(arr == fasle){ console.log("true"); // ==兩邊轉數值 }
循環渲染
// 單向數據綁定 // 支持JS表達式 // items可以是數字、字符串、數組、對象
單向
var obj = {}; var initValue = "hello"; Object.defineProperty(obj,"newKey",{ get:function (){ //當獲取值的時候觸發的函數 return initValue; }, set:function (value){ //當設置值的時候觸發的函數,設置的新值通過參數value拿到 initValue = value; } }); //獲取值 console.log( obj.newKey ); //hello 輸出 //設置值 obj.newKey = "change value"; console.log( obj.newKey ); //change value console.log( initValue ); //change value
雙向
var obj = {}; var initValue = "hello"; Object.defineProperty(obj,"newKey",{ get:function (){ //當獲取值的時候觸發的函數 return initValue; }, set:function (value){ //當設置值的時候觸發的函數,設置的新值通過參數value拿到 initValue = value; } }); document.getElementById("txt").oninput = function(e){ obj.newKey = e.target.value; }單頁應用 vs 多頁應用
多頁應用
頁面跳轉 ---> 返回html 優點: 首屏速度快,SEO效果好 缺點: 頁面切換慢
單頁應用
頁面跳轉 ---> JS動態渲染 優點: 頁面切換快 缺點: 首屏速度慢,SEO差Vue 實例
分類
根實例與組件實例區別
1、是否有掛載 有---根實例 沒---組件實例 2、文件后綴 .js---根實例 .vue--組件實例 3、寫法 手動new Vue()---根實例 導出export default {}---組件實例組件
組件是什么?與模塊有什么不同?
使用Vue構建單頁應用,單頁應用由Vue單文件組件組成,所謂組件指的就是Vue單文件組件(包含模板、樣式、交互)
模塊指的就是JS模塊(單純包含JS代碼)
使用ES6模塊化導入 1、路徑問題 nodejs內置模塊與npm安裝的第三方模塊,直接引用 import Vue from "vue"; import http from "http"; 自定義模塊或自定義組件,要帶路徑引用 ./ 代表 當前文件所在路徑 ../代表 當前文件父級所在路徑 import App from "./App.vue"; import App from "../App.vue"; 2、后綴問題(無后綴,先判斷是否是文件,找不到再判斷是否是目錄) 當省略后綴,只會匹配js/json/node后綴文件 所以當你要導入css、vue單文件組件時,就必須加上后綴 如果導入的是文件夾(包),將按如下順序查找: <1>查找 package.json 下是否定義了 main 字段,是則讀取 main 字段下定義的入口。 <2>如果沒有 package.json 文件,則讀取文件夾下的 index.js 或者 index.node。 <3>如果都 package.json、index.js、index.node 都找不到,拋出錯誤 Error: Cannot find module "some-library"。
鏈接描述
組件與模塊最大區別是:是否要注冊
使用流程 組件(.vue): 導入——>注冊——>使用 模塊(.js): 導入——>使用
組件之間關系
1、嵌套關系(父子、爺孫) 2、非嵌套關系(兄弟、表叔與我)
組件定義的三大區域
1、模板 0~1個 2、腳本