详解如何用模块化的方式写vuejs


Posted in Javascript onDecember 16, 2017

引子

vuejs 是一个入门简单的框架,具有使用简单,扩展方便的特点。随着webpack的流行,vuejs也推出了自己的load,vue-loader,可以方便的打包代码。最近写了一个json viewer-ac,就是完全使用vue-loader带来的模块化特性,写的比较开心,也得到了不少经验。这里记录一下。

文件结构

<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标签,比如一个div。

style 里是css代码,这个代码是作用到整个页面的,如果只想作用到当前的模板中,需要用scoped属性

<style scoped>

如果想用一些css预处理器,比如sass,只需要声明lang,然后vue-loader就会自动的加载,当然,前提是对应的 sass-loader安装好。

<style lang="sass">

script 注意这里使用的是 es6 的代码,我是使用babel来编译,所以理所当然需要安装 babel,es6的preset,还要在根目录下自建 .babelrc 文件。具体可以参考我的 ac 或者用官方的 vue-cli 来初始化项目。

template 做不可见标签

template不仅是模板最外面的标签,同时,它也可以作为一个普通的标签使用。比如,当我们需要用 v-if 来控制部分区域的显示与隐藏时,就可以这样。

<template>
  <template v-if="valid">
    <div></div>
  </template>
  <template v-else>
   <div></div>
  </template>
</template>

而且,template是不会被渲染的,所以不会影响最终的dom结构。

注意:v-show 不能和 template 一起使用

flux

实际开发的时候,会发现原始的数据管理模式比较混乱,很难区分哪些是临时数据,持久数据,用户数据,后台数据,这个时候,引入 flux是再合适不过了。

如果暂时不想引入别的lib,可以尝试自己实现一个,其实非常简单。准备一个 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})
    }
  }
}

所有视图的数据都来自 state。所有修改必须通过actions来完成。 因为在子组件中对数据的修改并不会影响到父组件,所以可以放心的使用 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中引入,岂不是很方便,很强大。

不过遗憾的是我暂时还不知道这个该如何实现。:(

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript应用:Iframe自适应其加载的内容高度
Apr 10 Javascript
学习ExtJS(一) 之基础前提
Oct 07 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 Javascript
js操作label给label赋值及取label的值示例
Nov 07 Javascript
jquery查找父元素、子元素(个人经验总结)
Apr 09 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
Oct 17 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
Jun 13 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
Vue自定义指令封装节流函数的方法示例
Jul 09 Javascript
vue权限管理系统的实现代码
Jan 17 Javascript
vue实现微信分享链接添加动态参数的方法
Apr 29 Javascript
react native 仿微信聊天室实例代码
Sep 17 Javascript
浅谈 Vue 项目优化的方法
Dec 16 #Javascript
在vue-cli中组件通信的方法
Dec 16 #Javascript
动手写一个angular版本的Message组件的方法
Dec 16 #Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
Dec 16 #Javascript
使用Electron构建React+Webpack桌面应用的方法
Dec 15 #Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
Dec 15 #Javascript
微信小程序左右滑动的实现代码
Dec 15 #Javascript
You might like
一个简单的PHP入门源程序
2006/10/09 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php利用cookies实现购物车的方法
2014/12/10 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
Python利用ansible分发处理任务
2015/08/04 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
最好的意大利皮夹克:D’Arienzo
2018/12/04 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
荷兰最大的儿童服装店:The Kids Republic
2019/04/13 全球购物
幼儿园教师辞职信
2014/01/18 职场文书
残疾人创业典型事迹
2014/02/01 职场文书
学雷锋标语
2014/06/25 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
雨花台导游词
2015/02/06 职场文书
中学生学习保证书
2015/02/26 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
Python Django模型详解
2021/10/05 Python
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python