詳解如何用模塊化的方式寫vuejs
引子
vuejs 是一個入門簡單的框架,具有使用簡單,擴展方便的特點。隨著webpack的流行,vuejs也推出了自己的load,vue-loader,可以方便的打包代碼。最近寫了一個json viewer-ac,就是完全使用vue-loader帶來的模塊化特性,寫的比較開心,也得到了不少經(jīng)驗。這里記錄一下。
文件結(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 里是模板代碼,這里一般是一個閉合的html標(biāo)簽,比如一個div。
style 里是css代碼,這個代碼是作用到整個頁面的,如果只想作用到當(dāng)前的模板中,需要用scoped屬性
<style scoped>
如果想用一些css預(yù)處理器,比如sass,只需要聲明lang,然后vue-loader就會自動的加載,當(dāng)然,前提是對應(yīng)的 sass-loader安裝好。
<style lang="sass">
script 注意這里使用的是 es6 的代碼,我是使用babel來編譯,所以理所當(dāng)然需要安裝 babel,es6的preset,還要在根目錄下自建 .babelrc 文件。具體可以參考我的 ac 或者用官方的 vue-cli 來初始化項目。
template 做不可見標(biāo)簽
template不僅是模板最外面的標(biāo)簽,同時,它也可以作為一個普通的標(biāo)簽使用。比如,當(dāng)我們需要用 v-if 來控制部分區(qū)域的顯示與隱藏時,就可以這樣。
<template>
<template v-if="valid">
<div></div>
</template>
<template v-else>
<div></div>
</template>
</template>
而且,template是不會被渲染的,所以不會影響最終的dom結(jié)構(gòu)。
注意:v-show 不能和 template 一起使用
flux
實際開發(fā)的時候,會發(fā)現(xiàn)原始的數(shù)據(jù)管理模式比較混亂,很難區(qū)分哪些是臨時數(shù)據(jù),持久數(shù)據(jù),用戶數(shù)據(jù),后臺數(shù)據(jù),這個時候,引入 flux是再合適不過了。
如果暫時不想引入別的lib,可以嘗試自己實現(xiàn)一個,其實非常簡單。準(zhǔn)備一個 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ù)都來自 state。所有修改必須通過actions來完成。 因為在子組件中對數(shù)據(jù)的修改并不會影響到父組件,所以可以放心的使用 vuejs 的雙向綁定特性。
然后可以在app的根組件下引入 state和actions,然后按需要傳遞給子組件
import { state, actions } from '../store' data() {
return {
state,
actions
}
},
<child :state="state" :handleClick="actions.update"></child>
import 公共的css
如果將頁面常用的style變量存儲到一個公共的文件比如 common.sass
$width: 80%; $height: 100%; $moli-green:#CCF3E4; $moli-white:#f8f8f8;
然后在組件的style中引入,豈不是很方便,很強大。
不過遺憾的是我暫時還不知道這個該如何實現(xiàn)。:(
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaScript事件循環(huán)及宏任務(wù)微任務(wù)原理解析
- 如何檢測JavaScript中的死循環(huán)示例詳解
- python3 循環(huán)讀取excel文件并寫入json操作
- JS forEach跳出循環(huán)2種實現(xiàn)方法
- 詳解在Vue.js編寫更好的v-for循環(huán)的6種技巧
- JavaScript 模塊化開發(fā)實例詳解【seajs、requirejs庫使用】
- Javascript模塊化機制實現(xiàn)原理詳解
- JS前端模塊化原理與實現(xiàn)方法詳解
- webpack4.x CommonJS模塊化淺析
- webpack打包非模塊化js的方法
- JavaScript 幾種循環(huán)方式以及模塊化的總結(jié)
相關(guān)文章
手寫可拖動穿梭框組件CustormTransfer vue實現(xiàn)示例
這篇文章主要為大家介紹了手寫可拖動穿梭框組件CustormTransfer vue實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
詳解windows下vue-cli及webpack 構(gòu)建網(wǎng)站(二)導(dǎo)入bootstrap樣式
這篇文章主要介紹了詳解windows下vue-cli及webpack 構(gòu)建網(wǎng)站(二)導(dǎo)入bootstrap樣式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
使用vue-element-admin框架從后端動態(tài)獲取菜單功能的實現(xiàn)
​ vue-element-admin是一個純前端的框架,左側(cè)菜單是根據(jù)路由生成的。實際開發(fā)中經(jīng)常需要根據(jù)當(dāng)前登陸人員的信息從后端獲取菜單進行展示,本文將詳細(xì)介紹如何實現(xiàn)該功能2021-04-04
Vue props實現(xiàn)父組件給子組件傳遞數(shù)據(jù)的方式
Vue中的配置項Props能讓組件接收外部傳遞過來的數(shù)據(jù),本文給大家介紹了Vue props實現(xiàn)父組件給子組件傳遞數(shù)據(jù)的幾種方式,文中有詳細(xì)的實現(xiàn)方式,具有一定的參考價值,需要的朋友可以參考下2023-10-10
Vue+ElementUI實現(xiàn)動態(tài)更換任意主題色(動態(tài)換膚)的全過程
眾所周知Element-UI有換膚功能,下面這篇文章主要給大家介紹了關(guān)于Vue+ElementUI實現(xiàn)動態(tài)更換任意主題色(動態(tài)換膚)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
vue項目打包部署到nginx后css樣式失效的問題及解決方法
我將自己的前端Vue項目,經(jīng)過build生成的dist文件夾copy到nginx的html文件夾中,然后寫了配置文件,運行訪問后發(fā)現(xiàn)頁面css樣式?jīng)]有加載到,下面給大家介紹vue項目打包部署到nginx后css樣式失效的問題及解決方法,感興趣的朋友一起看看吧2024-12-12
淺談實現(xiàn)vue2.0響應(yīng)式的基本思路
這篇文章主要介紹了淺談實現(xiàn)vue2.0響應(yīng)式的基本思路,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02

