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