摘要:父子組件通信父組件通過向下傳遞數(shù)據(jù)給子組件,子組件通過給父組件發(fā)送消息。是一個對象而不是字符串?dāng)?shù)組時,它包含驗證要求。狀態(tài)管理由于多個狀態(tài)分散的跨越在許多組件和交互間,大型應(yīng)用的復(fù)雜度也隨之增長。提供了,可以通過文檔學(xué)習(xí)。
什么是vue
vue是一個前端框架,主要兩個特點:數(shù)據(jù)綁定、組件化。
安裝環(huán)境根據(jù)教程安裝環(huán)境:node.js、npm、webpack、vue-cli
主要的命令行:
# 保證已安裝node.js環(huán)境 全局安裝 vue-cli(vue的腳手架) $ npm install --global vue-cli # 創(chuàng)建一個基于 webpack 模板的新項目 $ vue init webpack my-project # 安裝依賴,走你 $ cd my-project $ npm install $ npm run dev
相關(guān)的幾個命令行:
# node版本 $ node -v # 清緩存 $ npm cache clean -f # 全局安裝鏡像 $ npm install -g nrm # 可用的鏡像資源 $ nrm ls # 選用taobao的鏡像(安裝鏡像之后,npm可以輸入cnpm代替) $ nrm use taobao # 安裝vue路由模塊和網(wǎng)絡(luò)請求模塊 $ cnpm install vue-router vue-resource --save # 工程打包 $ npm run build編輯器插件
sublime text 中安裝Vue Syntax Highlight插件
使用官網(wǎng)文檔學(xué)習(xí)一些小總結(jié):
template 寫 html,script寫 js,style寫樣式
一個template下只能有一個并列的 div
數(shù)據(jù)要寫在return 里面,如:
組件{{msg}}
組件是什么?
組件可以擴(kuò)展html元素,封裝可以重用的代碼。Vue.js的編譯器為它添加特殊功能。
使用組件
注冊全局組件,使用:Vue.component(tagName,options):
//注冊,對于自定義標(biāo)簽名稱,不強(qiáng)制要求遵循W3C規(guī)則(小寫,并且包含一個短杠),不過還是盡量遵循的比較好 Vue.component("my-component",{ template:"A example component!" }) //使用 //創(chuàng)建根實例,要確保初始化根實例之前注冊了組件 new Vue({ el:"#example" })注冊局部組件,通過組件實例選項注冊,可以使組件盡在另一個實例/組件的作用域中可用:
var Child= { template:"A example component!" } new Vue({ //... components:{ //將只在父模板可用 "my-component":Child } }) 這種封裝也適用于其他可注冊的Vue功能,如指令。
父子組件通信父組件通過props向下傳遞數(shù)據(jù)給子組件,子組件通過events給父組件發(fā)送消息。
props
組件實例的作用域是孤立的。子組件的模板內(nèi)不應(yīng)該直接引用父組件的數(shù)據(jù),可以使用props把數(shù)據(jù)傳給子組件。props是父組件用來傳遞數(shù)據(jù)的一個自定義的屬性。子組件需要顯式的用props選項聲明的“prop”
Vue.component("child",{ //聲明props props:["myMessage"],//使用非字符串模板時,prop的名字形式會從camelCase轉(zhuǎn)為kebab-case template:"hello,{{message}}!" }) //使用//渲染 hello,jake! 動態(tài)的props
可以用v-bind動態(tài)綁定props的值到父組件的數(shù)據(jù)中,當(dāng)父組件的數(shù)據(jù)有變化時,子組件會隨之變化。
//:my-message 是 v-bind:my-message的縮寫prop驗證
組件可以為props指定驗證要求。prop是一個對象而不是字符串?dāng)?shù)組時,它包含驗證要求。
自定義事件
子組件傳遞數(shù)據(jù)給父組件,需要用到自定義事件:
使用 $on(eventName) 監(jiān)聽事件
使用 $emit(eventName) 觸發(fā)事件非父子組件通信Vue.component("button-counter",{ template:"", data:function () { return { counter:0 } }, methods:{ increment: function(){ this.counter +=1 this.$emit("incrment") } } }) new Vue({ el:"#counter-event-example", data:{ total:0 }, methods:{ incrementTotal:function(){ this.total +=1 } } }){{ total }}
簡單場景下,使用一個用的Vue實例作為中央事件的總線。
var bus = new Vue() //觸發(fā)組件A中的事件 bus.$emit("id-selected",1) //在組件B創(chuàng)建的鉤子中監(jiān)聽事件 bus.$on("id-selected",function(id){ //... })復(fù)雜情況下,應(yīng)該考慮專門的狀態(tài)管理模式。
編寫可復(fù)用的組件可復(fù)用的組件應(yīng)當(dāng)定義一個清晰的公開接口,Vue組件的接口,來自三部分——props、events、slots:
路由
props允許外部環(huán)境傳遞數(shù)據(jù)給組件。
events允許組件觸發(fā)外部環(huán)境的副作用。
slots允許外部環(huán)境將額外的內(nèi)容組合在組件中。大多數(shù)的單頁面應(yīng)用,都推薦使用vue-router庫
簡單的路由不需要引入整個路由庫。如:const NotFound = { template: "Page not found
" } const Home = { template: "home page
" } const About = { template: "about page
" } const routes = { "/": Home, "/about": About } new Vue({ el: "#app", data: { currentRoute: window.location.pathname }, computed: { ViewComponent () { return routes[this.currentRoute] || NotFound } }, render (h) { return h(this.ViewComponent) } })狀態(tài)管理將 h 作為 createElement 的別名是 Vue 生態(tài)系統(tǒng)中的一個通用慣例,實際上也是 JSX 所要求的,如果在作用域中 h
失去作用, 在應(yīng)用中會觸發(fā)報錯。由于多個狀態(tài)分散的跨越在許多組件和交互間,大型應(yīng)用的復(fù)雜度也隨之增長。采用簡單的store模式:
var store = { debug: true, state: { message: "Hello!" }, setMessageAction (newValue) {//變更記錄 this.debug && console.log("setMessageAction triggered with", newValue) this.state.message = newValue }, clearMessageAction () { this.debug && console.log("clearMessageAction triggered") this.state.message = "clearMessageAction triggered" } } //實例/組件仍然可以擁有和管理自己的私有狀態(tài) var vmA = new Vue({ data: { privateState: {}, sharedState: store.state } }) var vmB = new Vue({ data: { privateState: {}, sharedState: store.state }組件不允許直接修改屬于 store 實例的 state,而應(yīng)執(zhí)行 action 來分發(fā) (dispatch) 事件通知 store 去改變,我們最終達(dá)成了 Flux 架構(gòu)。這樣約定的好處是,我們能夠記錄所有 store 中發(fā)生的 state 改變,同時實現(xiàn)能做到記錄變更 (mutation) 、保存狀態(tài)快照、歷史回滾/時光旅行的先進(jìn)的調(diào)試工具。Vue提供了vuex,可以通過文檔學(xué)習(xí)。
服務(wù)端渲染SSR先看看我們什么時候需要它:
SEO 搜索引擎優(yōu)化
客戶端網(wǎng)絡(luò)慢
客戶端運行在老的或者沒有javascript引擎上,Vue只能運行在IE9+
服務(wù)端渲染來改善一個少數(shù)的營銷頁面等的SEO,可以用預(yù)渲染替換。可以用prerender-spa-plugin插件來添加預(yù)渲染。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86681.html
相關(guān)文章
Vue 筆記三:Vue2.0與1.0的區(qū)別
摘要:升級的區(qū)別與的斷層式升級不同,延續(xù)了自己的風(fēng)格。在命名方式和上有一些區(qū)別,掌握它們是你升級整個項目的關(guān)鍵。以下內(nèi)容都是來源于個人項目的一些經(jīng)驗之談,并非系統(tǒng)性的闡述??偰夸浨岸私?jīng)驗收集器轉(zhuǎn)載自個人建了前端學(xué)習(xí)群,旨在一起學(xué)習(xí)前端。 升級的區(qū)別 與angular的斷層式升級不同,vue延續(xù)了自己的風(fēng)格。在命名方式和API上有一些區(qū)別,掌握它們是你升級整個項目的關(guān)鍵。以下內(nèi)容都是來源于個人...
(原創(chuàng))vue 學(xué)習(xí)筆記
摘要:菜鳥教程這是一個屬性其值是字符串菜鳥教程同上這是一個屬性其值是字符串用于定義的函數(shù),可以通過來返回函數(shù)值。它們都有前綴,以便與用戶定義的屬性區(qū)分開來。 開篇語 我最近學(xué)習(xí)了js,取得進(jìn)步,現(xiàn)在學(xué)習(xí)vue.js.建議新手學(xué)習(xí),請不要用npm的方式(vue-cli,vue腳手架),太復(fù)雜了. 請直接下載vue.js文件本地引入,就上手學(xué)習(xí)吧參照菜鳥教程網(wǎng)站的vue.js教程http://...
vue2.0學(xué)習(xí)筆記(事件處理)
摘要:請記住,會告訴瀏覽器你不想阻止事件的默認(rèn)行為。而單單釋放也不會觸發(fā)事件。修飾符修飾符允許你控制由精確的系統(tǒng)修飾符組合觸發(fā)的事件。當(dāng)一個被銷毀時,所有的事件處理器都會自動被刪除。 1、監(jiān)聽事件 用 v-on 指令監(jiān)聽 DOM 事件,并在觸發(fā)時運行一些 JavaScript 代碼。 Add 1 The button above has been clicked {{ counte...
vue2.0學(xué)習(xí)筆記(表單輸入綁定)
摘要:復(fù)選框當(dāng)選中時當(dāng)沒有選中時這里的和特性并不會影響輸入控件的特性,因為瀏覽器在提交表單時并不會包含未被選中的復(fù)選框。 1、基礎(chǔ)用法 v-model指令可以實現(xiàn)表單元素和Model中數(shù)據(jù)的雙向數(shù)據(jù)綁定。只能運用在表單元素中(input、radio、text、address、email、select、checkbox、textarea) 可以用 v-model 指令在表單 、 及 元素上...
vue2.0學(xué)習(xí)筆記(組件注冊)
摘要:組件名在注冊一個組件的時候,我們始終需要給它一個名字。局部注冊全局注冊往往是不夠理想的?;A(chǔ)組件的自動化全局注冊可能你的許多組件只是包裹了一個輸入框或按鈕之類的元素,是相對通用的。記住全局注冊的行為必須在根實例通過創(chuàng)建之前發(fā)生。 1、組件名 在注冊一個組件的時候,我們始終需要給它一個名字。 Vue.component(my-component-name, { /* ... */ }) ...
發(fā)表評論
0條評論
閱讀 2983·2021-11-23 09:51
閱讀 1691·2021-10-15 09:39
閱讀 1086·2021-08-03 14:03
閱讀 2922·2019-08-30 15:53
閱讀 3462·2019-08-30 15:52
閱讀 2521·2019-08-29 16:17
閱讀 2834·2019-08-29 16:12
閱讀 1675·2019-08-29 15:26