使用Vue构建中(大)型应用

想做SPA就快上车!

init

首先要起一个项目,推荐用vue-cli安装

$ npm install -g vue-cli
$ vue init webpack demo
$ cd demo
$ npm install

demo是这个示例项目的名字

现在看到目录结构如下

clipboard.png

下面来稍微介绍下

build目录是一些webpack的文件,配置参数什么的,一般不用动

src源码文件夹,基本上文件都应该放在这里。

static生成好的文件会放在这个目录下。

test测试文件夹,测试都写在这里

.babelrc babel编译参数,vue开发需要babel编译

.editorconfig 看名字是编辑器配置文件,不晓得是哪款编辑器,没有使用过。

.eslintrc.js eslint配置文件,用以规范团队开发编码规范,大中型项目很有用

.gitignore 用来过滤一些版本控制的文件,比如node_modules文件夹

index.html 主页

package.json 项目文件,记载着一些命令和依赖还有简要的项目描述信息

README.md 介绍自己这个项目的,想怎么写怎么写。不会写就参照github上star多的项目,看人家怎么写的

下面我针对自己的需要修改一些配置。你可以根据自己的需要进行修改。

首先去写.eslintrc.js。在rules中加入"indent": [1, 4, { "SwitchCase": 1 }]

因为我更喜欢4个空格表一个缩进,报警程度调整成1是因为build文件夹里有很多行是2个空格,草草的。

然后在index.html中的<app></app>改成<div id="root"></div>

这个文件没有写入任何加载css和js的link,而依旧可以正常运行的秘诀在于webpack会在编译的时候重新调整这个文件,注入依赖,所以不用太担心。

好了,差不多了。进行下一步

添加依赖

我个人习惯写stylus,所以要加上预处理器,如果喜欢sass可以自行添加。

vue-router做前端路由管理,一个中大型项目必须要做路由管理!

vuex做数据管理,类似于flux的存在,没有vuex,中大型应用中的状态会把开发者搞死,绝对。

$ npm install --save vue-router vuex
$ npm install --save-dev stylus-loader babel-runtime

好了,到这里,依赖也加好了。剩下的就是写代码了?

不急,我先说下两个vue插件的介绍

vue-router 简明API

vue-router用起来非常的简单

入口文件(src/main.js):

'use strict'
import Vue from 'vue' // 引入vue
import Router from 'vue-router' // 引入vue-routerimport App from './App' // 引入根组件
import routerMap from './router' // 引入路由表Vue.use(Router) // 声明使用vue-router
const router = new Router() // 创建路由
routerMap(router) // 路由表引入router.start(App, '#root') // 开启应用

看到缺了一个./router.js文件,来,创建。

// src/router.js
'use strict'export default function (router) {router.map({'/': {name: 'index',component: require('./components/contents/hello.vue')},'/hi': {name: 'hi',// 按需加载component: function (resolve) {require(['./components/contents/hi.vue'], resolve)}}})
}

好了,路由创建成功了,顺便还搞了个按需加载。

那么在模板文件中如何使用?

很简单的,就像这样就可以了。

<!-- src/components/contents/hello.vue -->
<a class="link" v-link="{name: 'hi'}">跳转到hi</a>

还有,告诉应用哪里需要路由转换

<!-- src/App.vue -->
<div class="container"><router-view></router-view>
</div>

vuex 简明API

这里简要介绍一下状态管理的vuex

在src下创建一个文件夹叫做vuex。里面定义三个文件。

mutation-types.js 定义类型的

actions.js 操作,可以分解成多个文件

store.js 入口文件,在根组件调用,然后所有子组件可以共享数据。

modules/headers.js 只是例子用的,一个headers的操作,需要定义数据的状态和mutation。action.js只是分发操作。

这一块还是看源码比较容易懂。

// src/vuex/mutation-types.js
export const SET_HEADER_TITLE = 'SET_HEADER_TITLE'
// src/vuex/store.js
import Vue from 'vue'
import Vuex from 'vuex'
import headers from './modules/headers'
import createLogger from 'vuex/logger'
Vue.use(Vuex)Vue.config.debug = trueconst debug = process.env.NODE_ENV !== 'production'export default new Vuex.Store({modules: {headers},strict: debug,moddlewares: debug ? [createLogger()] : []
})
// src/vuex/actions.js
import {SET_HEADER_TITLE
} from './mutation-types'export const setTitle = makeAction(SET_HEADER_TITLE)function makeAction (type) {return ({ dispatch }, ...args) => dispatch(type, ...args)
}
// src/vuex/modules/headers.js
import {SET_HEADER_TITLE
} from '../mutation-types'const state = {title: 'default'
}const mutations = {[SET_HEADER_TITLE](state, newTitle) {state.title = newTitle}
}export default {state,mutations
}

我再说两个,一个挂载store,一个获取数据,触发操作。

挂载store

// src/App.vue
import store from './vuex/store'
import HeaderComponent from './components/header'
import FooterComponent from './components/footer'
export default {store,components: {HeaderComponent,FooterComponent}
}

获取数据及操作

// src/components/header.vue
// 从vuex拿数据,然后渲染到页面上
// 如果需要修改可以调用setTitle
import { setTitle } from '../vuex/actions'
export default {vuex: {getters: {title: state => state.headers.title},actions: {setTitle}}
}

fetch

单页应用少不了服务端交互,别老用ajax了,换fetch吧,少年!

$ npm install --save isomorphic-fetch es6-promise
// src/vuex/actions.js
require('es6-promise').polyfill()
require('isomorphic-fetch')

我在示例代码中并没有写。

fetch用起来根本不会回忆ajax时代的。

stylus

在之前的文章中安利过很多次stylus了,各种方便,这里一笔带过,喜欢的同学自然会去找文档

test

测试是非常重要的一环。要想以后不出乱子,一定要尽早写好测试。

示例代码中有少量测试,推荐看一下

Code

我还是决定不在文章里写代码了。

多端

vue创作的应用不仅可以跑在浏览器里,还可以通过electron以客户端的形式跑起来!

是不是吊吊的。

至于移动端,听闻阿里内部有在开发Weex,类vue的api。等待开源吧。

未来

未来js的前途肯定是不错的!加油~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android之动画精讲一:从setTranslationX谈属性动画和view动画的区别

转载&#xff1a;http://blog.csdn.net/yanzi1225627/article/details/47850471 最近又用到了动画&#xff0c;决定把几次项目里用到的动画走过的弯路总结一下&#xff0c;顺便梳理下android的动画体系。众所周知&#xff0c;android动画分三类&#xff1a;一是View 动画&…

现在的娃娃有多智能?

1 我的12月&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 抱歉啊女儿...&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 一看就很厉害的名字▼4 突然的潮流&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 上下班的表情管理&#xff08;素…

Nats的消息通信模型

版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/50996679 Nats的消息通信模型 作者&#xff1a;chszs&#xff0c;未经博主允许不得转载。经许可的转载需注明作者和博客主页&#xff1a;http:…

.NET6之MiniAPI(一):开始Mini API

Mini API之前的官方.net web框架&#xff0c;都是偏重的&#xff0c;不像其他语言&#xff0c;如go&#xff0c;python&#xff0c;或基于c#的nancy&#xff0c;都是简洁方式来开启web之旅的。所以有小伙伴就吐槽.net基于web的不友好性&#xff0c;这不&#xff0c;.net6中官方…

超线程_超线程加核显 i310100+梅捷H410超值爆款组合

酷睿i3-10100是一颗4核心8线程&#xff0c;三级缓存6MB&#xff0c;主频3.6-4.3GHz&#xff0c;集成核显UHD 630 350-1100MHz&#xff0c;热设计功耗65W。对比上代酷睿i3-9100&#xff0c;它增加了超线程技术&#xff0c;加速频率高了100MHz&#xff0c;其他不变。为什么在短短…

Hibernate之悲观锁与乐观锁

http://blog.csdn.net/a19881029/article/details/20665663 如果需要保证数据访问的排它性&#xff0c;则需对目标数据加“锁”&#xff0c;使其无法被其它程序修改 一&#xff0c;悲观锁 对数据被外界&#xff08;包括本系统当前的其它事务和来自外部系统的事务处理&#xff0…

他本硕博连跨3大专业,毕业后没多久被破格聘为985高校教授!

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;募格学术整合自东南大学新闻网、东南大学校团委、募格课堂图片&#xff1a;网络来源&#xff1a;东南大学新闻网、东南大学校团委他从本科的计算机专业&#xff0c;到研究生的应用数学专业&#xff0c;再到博士开始研…

Winform VS2015打包

首先 &#xff0c;我们要去官网http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio注册一个账号已获得installshiled的注册码。 是免费的~ 注册完后就可以下载我们的第三方打包工具&#xff1a; 注意&#xff1a;这里下载并安装完…

触发键盘_雷蛇这款光轴机械键盘开箱评测,光速触发,颜值爆表

首先感谢头条众测给予雷蛇猎魂光蛛精英版机械键盘的测评机会&#xff0c;雷蛇作为在游戏设备领域深耕的领先者&#xff0c;其生产的游戏设备深得游戏玩家喜爱&#xff0c;下面我们来一睹这款雷蛇机械键盘的风采。首先从包装盒正面可以感受到这款雷蛇光学机械轴键盘霸气侧漏&…

spring之使用Spring Security实现权限管理

转载&#xff1a;http://hanqunfeng.iteye.com/blog/1155226 目录 SpringSecurity3.X--一个简单实现 SpringSecurity3.X--前台与后台登录认证 SpringSecurity3.X--remember-me SpringSecurity3.X--验证码 作者对springsecurity研究不深&#xff0c;算是个初学者吧&#xff0c;最…

iNeuOS工业互联网操作系统,提升分布式云端控制安全策略和增加实时日志功能...

目 录1. 概述... 22. 平台演示... 23. 云端控制策略和应用过程... 23.1 云端控制策略... 23.2 控制应用过程... 34. 实时日志... 71. 概述这次升级主要提升云端控制的安全策略&#xff0c;不管公有云部署或是私有云部署&#…

直男的回答能多出乎意料?

1 我家的鸭子没这么扁&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 这个回答&#xff0c;妙啊...&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 强迫症犯人要求判10年▼4 像羊又像猫&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼5 美女…

Angularjs调用公共方法与共享数据

这个问题场景是在使用ionic开发页面的过程中发现&#xff0c;多个页面对应的多个controller如何去调用公共方法&#xff0c;比如给ionic引入了toast插件&#xff0c;如何将这个插件的调用变成公共方法或者设置成工具类&#xff0c;因为在每个controller中直接注入这个toast插件…

mysql去掉两个最高分_数据分析系列 16/32 | MySQL中子查询与联合查询

前面说了很多MySQL中的查询&#xff0c;比如条件查询、分组聚合查询、连接查询&#xff0c;今天来说一下另外两个非常的重要的查询&#xff0c;MySQL中的子查询和联合查询。PART01子查询子查询也称嵌套查询&#xff0c;是将一个查询语句嵌套在另一个查询语句的WHERE子句或者HAV…

那些不回你微信的人都在看什么?

如何成为一个“聊得开”的人&#xff1f;如何丰富空闲时光&#xff1f;如何在短时间内获取最最专业的文化、艺术资讯&#xff1f;小编给大家推荐几个公众号它们有趣有颜有料长按二维码&#xff0c;选择“识别图中二维码”关注印客美学id&#xff1a;inkbetter△长按二维码“识别…

按照学号查找学生_[源码和文档分享]基于JAVA和MYSQL数据库的学生成绩管理系统...

一、需求分析本系统是学生成绩管理系统&#xff0c;所以应该做到可以录入学生成绩&#xff0c;修改学生成绩&#xff0c;删除学生成绩&#xff0c;查询学生成绩&#xff0c;以及最后的所有学生按照GPA排名。本系统的数据来源期末考试成绩&#xff0c;用来实现录入&#xff0c;查…

颜宁问4对科研夫妻:男科学家怎样平衡事业家庭?

全世界只有3.14 % 的人关注了爆炸吧知识本文来源&#xff1a;科学网网上很多人一说到我&#xff0c;就说颜宁之所以能成功&#xff0c;因为她是单身&#xff0c;没有家庭拖累。但事实上&#xff0c;有家庭、有事业才是绝大多数人的现状。我们这次请来四对科研伉俪&#xff0c;不…

WebService学习笔记---CXF入门

2019独角兽企业重金招聘Python工程师标准>>> 一、准备 软件环境&#xff1a; JDK1.8, Eclipse JEE 4.4, Maven-3.2.5, Spring-4, CXF-3.1.5 二、创建项目 新建一个Maven项目&#xff0c;在pom.xml里添加spring依赖<dependencyManagement><dependencies>…

.NET 6新特性试用 | ArgumentNullException卫语句

前言在前面的文章中&#xff08;《可空引用类型》&#xff09;&#xff0c;我们介绍过编译器会帮我们检查空引用&#xff0c;但是仅仅是警告。最好的方式还是在运行时用卫语句进行检查&#xff1a;private void Test(WeatherForecast weatherForecast) {if (weatherForecast n…

JSP之EL表达式详细介绍

一、JSP EL语言定义 E L&#xff08;Expression Language&#xff09; 目的&#xff1a;为了使 JSP写起来更加简单。 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言&#xff0c;它提供了在 JSP 中简化表达式的方法。它是一种简单的语言&#xff0c;基于可用的命名空…