详解如何用模块化的方式写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 相关文章推荐
JS 统计时间
Mar 09 Javascript
js常用函数 不错
Sep 08 Javascript
JavaScript验证图片类型(扩展名)的函数分享
May 05 Javascript
jQuery学习笔记之总体架构
Jun 03 Javascript
javascript 判断整数方法分享
Dec 16 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
javascript实现的网站访问量统计代码
Dec 20 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
angular动态表单制作
Feb 23 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
微信小程序实现搜索指定景点周边美食、酒店
May 18 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
python中图像通道分离与合并实例
2020/01/17 Python
django迁移文件migrations的实现
2020/03/31 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
2020/06/23 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
2014新年寄语
2014/01/20 职场文书
学生会招新策划书
2014/02/14 职场文书
关于学习的演讲稿
2014/05/10 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书