详解如何用模块化的方式写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刷新站IP和PV
Sep 05 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
May 07 Javascript
js清除input中type等于file的值域(示例代码)
Dec 24 Javascript
jquery实现简单实用的打分程序实例
Jul 23 Javascript
再谈JavaScript异步编程
Jan 27 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 Javascript
node.js从数据库获取数据
May 08 Javascript
vue+element实现批量删除功能的示例
Feb 28 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
Jun 14 Javascript
vue单文件组件无法获取$refs的问题
Jun 24 Javascript
Vue实现导航栏菜单
Aug 19 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
上海无线电三厂简史修改版
2021/03/01 无线电
.htaccess文件保护实例讲解
2011/02/06 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
跟我学Laravel之路由
2014/10/15 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
简单实现python进度条脚本
2017/12/18 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
Python笔记之facade模式
2019/11/20 Python
Python 实现Serial 与STM32J进行串口通讯
2019/12/18 Python
Python json读写方式和字典相互转化
2020/04/18 Python
Python验证码截取识别代码实例
2020/05/16 Python
用Python制作音乐海报
2021/01/26 Python
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
类和结构的区别
2012/08/15 面试题
药物学专业学生的自我评价
2013/10/27 职场文书
机电一体化大学生求职信
2013/11/08 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
银行委托书范本
2014/09/28 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书