详解如何用模块化的方式写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 相关文章推荐
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
JavaScript函数的调用以及参数传递
Oct 21 Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
Apr 29 Javascript
深入理解vue.js双向绑定的实现原理
Dec 05 Javascript
js中document.referrer实现移动端返回上一页
Feb 22 Javascript
Vue.js搭建移动端购物车界面
Jun 28 Javascript
vue-swiper的使用教程
Aug 30 Javascript
three.js实现圆柱体
Dec 30 Javascript
js回文数的4种判断方法示例
Jun 04 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 Javascript
小程序实现筛子抽奖
May 26 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
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
使用js 设置url参数
2013/07/08 Javascript
javascript实现二级级联菜单的简单制作
2015/11/19 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
原生JS实现贪吃蛇小游戏
2020/03/09 Javascript
python通过socket查询whois的方法
2015/07/18 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
Python中的random.uniform()函数教程与实例解析
2019/03/02 Python
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
在vscode中配置python环境过程解析
2019/09/28 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
Python如何批量生成和调用变量
2020/11/21 Python
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
大四学年自我鉴定
2013/11/13 职场文书
党课知识竞赛主持词
2014/04/01 职场文书
安全技术说明书
2014/05/09 职场文书
查摆剖析材料范文
2014/09/30 职场文书
大专护理专业自荐信
2015/03/25 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
Docker安装MySql8并远程访问的实现
2022/07/07 Servers