詳解如何用模塊化的方式寫(xiě)vuejs
引子
vuejs 是一個(gè)入門(mén)簡(jiǎn)單的框架,具有使用簡(jiǎn)單,擴(kuò)展方便的特點(diǎn)。隨著webpack的流行,vuejs也推出了自己的load,vue-loader,可以方便的打包代碼。最近寫(xiě)了一個(gè)json viewer-ac,就是完全使用vue-loader帶來(lái)的模塊化特性,寫(xiě)的比較開(kāi)心,也得到了不少經(jīng)驗(yàn)。這里記錄一下。
文件結(jié)構(gòu)
<template> <div> <app-header></app-header> </div> </template> <style> ... </style> <script> import AppHeader from './AppHeader.vue' export default { name:'app', props:['data'] data() { return {} }, methods: { handleClick() {} }, components: { AppHeader } } </script>
template 里是模板代碼,這里一般是一個(gè)閉合的html標(biāo)簽,比如一個(gè)div。
style 里是css代碼,這個(gè)代碼是作用到整個(gè)頁(yè)面的,如果只想作用到當(dāng)前的模板中,需要用scoped屬性
<style scoped>
如果想用一些css預(yù)處理器,比如sass,只需要聲明lang,然后vue-loader就會(huì)自動(dòng)的加載,當(dāng)然,前提是對(duì)應(yīng)的 sass-loader安裝好。
<style lang="sass">
script 注意這里使用的是 es6 的代碼,我是使用babel來(lái)編譯,所以理所當(dāng)然需要安裝 babel,es6的preset,還要在根目錄下自建 .babelrc 文件。具體可以參考我的 ac 或者用官方的 vue-cli 來(lái)初始化項(xiàng)目。
template 做不可見(jiàn)標(biāo)簽
template不僅是模板最外面的標(biāo)簽,同時(shí),它也可以作為一個(gè)普通的標(biāo)簽使用。比如,當(dāng)我們需要用 v-if 來(lái)控制部分區(qū)域的顯示與隱藏時(shí),就可以這樣。
<template> <template v-if="valid"> <div></div> </template> <template v-else> <div></div> </template> </template>
而且,template是不會(huì)被渲染的,所以不會(huì)影響最終的dom結(jié)構(gòu)。
注意:v-show 不能和 template 一起使用
flux
實(shí)際開(kāi)發(fā)的時(shí)候,會(huì)發(fā)現(xiàn)原始的數(shù)據(jù)管理模式比較混亂,很難區(qū)分哪些是臨時(shí)數(shù)據(jù),持久數(shù)據(jù),用戶(hù)數(shù)據(jù),后臺(tái)數(shù)據(jù),這個(gè)時(shí)候,引入 flux是再合適不過(guò)了。
如果暫時(shí)不想引入別的lib,可以嘗試自己實(shí)現(xiàn)一個(gè),其實(shí)非常簡(jiǎn)單。準(zhǔn)備一個(gè) store.js
let trim = str => { return str.replace(/(^[\s\t]+)|([\s\t]+$)/g, ''); } export const state = { jsons: [] } export const actions = { parse(jsonStr) { if(!trim(jsonStr)) return let jsonObj = null try{ jsonObj = JSON.parse(jsonStr) }catch(err){ state.jsons.push({err: jsonStr + '', valid: false }) } if(jsonObj){ state.jsons.push({obj:jsonObj, valid: true}) } } }
所有視圖的數(shù)據(jù)都來(lái)自 state。所有修改必須通過(guò)actions來(lái)完成。 因?yàn)樵谧咏M件中對(duì)數(shù)據(jù)的修改并不會(huì)影響到父組件,所以可以放心的使用 vuejs 的雙向綁定特性。
然后可以在app的根組件下引入 state和actions,然后按需要傳遞給子組件
import { state, actions } from '../store' data() { return { state, actions } },
<child :state="state" :handleClick="actions.update"></child>
import 公共的css
如果將頁(yè)面常用的style變量存儲(chǔ)到一個(gè)公共的文件比如 common.sass
$width: 80%; $height: 100%; $moli-green:#CCF3E4; $moli-white:#f8f8f8;
然后在組件的style中引入,豈不是很方便,很強(qiáng)大。
不過(guò)遺憾的是我暫時(shí)還不知道這個(gè)該如何實(shí)現(xiàn)。:(
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaScript事件循環(huán)及宏任務(wù)微任務(wù)原理解析
- 如何檢測(cè)JavaScript中的死循環(huán)示例詳解
- python3 循環(huán)讀取excel文件并寫(xiě)入json操作
- JS forEach跳出循環(huán)2種實(shí)現(xiàn)方法
- 詳解在Vue.js編寫(xiě)更好的v-for循環(huán)的6種技巧
- JavaScript 模塊化開(kāi)發(fā)實(shí)例詳解【seajs、requirejs庫(kù)使用】
- Javascript模塊化機(jī)制實(shí)現(xiàn)原理詳解
- JS前端模塊化原理與實(shí)現(xiàn)方法詳解
- webpack4.x CommonJS模塊化淺析
- webpack打包非模塊化js的方法
- JavaScript 幾種循環(huán)方式以及模塊化的總結(jié)
相關(guān)文章
vue3如何實(shí)現(xiàn)表格內(nèi)容無(wú)縫滾動(dòng)(又寫(xiě)了一堆冗余代碼)
這篇文章主要給大家介紹了關(guān)于vue3如何實(shí)現(xiàn)表格內(nèi)容無(wú)縫滾動(dòng)的相關(guān)資料,在Vue3項(xiàng)目中難免會(huì)遇到讓列表滾動(dòng)的需求,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04Vue項(xiàng)目中實(shí)現(xiàn)ElementUI按需引入過(guò)程解析
這篇文章主要介紹了Vue項(xiàng)目中實(shí)現(xiàn)ElementUI按需引入,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05淺談Vue.js之初始化el以及數(shù)據(jù)的綁定說(shuō)明
今天小編就為大家分享一篇淺談Vue.js之初始化el以及數(shù)據(jù)的綁定說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11在vue中多次調(diào)用同一個(gè)定義全局變量的實(shí)例
今天小編就為大家分享一篇在vue中多次調(diào)用同一個(gè)定義全局變量的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09Vue支持搜索與篩選的用戶(hù)列表實(shí)現(xiàn)流程介紹
這篇文章主要介紹了Vue支持搜索與篩選的用戶(hù)列表實(shí)現(xiàn)流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10vue關(guān)于錨點(diǎn)定位、跳轉(zhuǎn)到指定位置實(shí)現(xiàn)方式
這篇文章主要介紹了vue關(guān)于錨點(diǎn)定位、跳轉(zhuǎn)到指定位置實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04解決VUE-Router 同一頁(yè)面第二次進(jìn)入不刷新的問(wèn)題
這篇文章主要介紹了解決VUE-Router 同一頁(yè)面第二次進(jìn)入不刷新的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07