详解如何用模块化的方式写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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
Mar 28 Javascript
jQuery层次选择器选择元素使用介绍
Apr 18 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
Apr 13 Javascript
详解支持Angular 2的表格控件
Jan 19 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
Feb 20 Javascript
js实现登录与注册界面
Nov 01 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
小程序实现展开/收起的效果示例
Sep 22 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
Dec 04 Javascript
javascript前端和后台进行数据交互方法示例
Aug 07 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面向对象全攻略 (十六) 对象的串行化
2009/09/30 PHP
PHP开发过程中常用函数收藏
2009/12/14 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
浅析PHP开发规范
2018/02/05 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
2014/10/17 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
js 判断数据类型的几种方法
2017/01/13 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
vue v-for直接循环数字实例
2019/11/07 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
python中的装饰器详解
2015/04/13 Python
python实现解数独程序代码
2017/04/12 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
Notino匈牙利:购买香水和化妆品
2019/04/12 全球购物
大学生思想汇报范文
2013/12/31 职场文书
应届护士求职信范文
2014/01/26 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
综艺节目策划方案
2014/06/13 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
一文帮你理解PReact10.5.13源码
2021/04/03 Javascript
MySQL RC事务隔离的实现
2022/03/31 MySQL