vue2单页面应用学习

前言

最近开始学习vue2.0,但看完后完全不知道要如何开始一个项目,网上找了半天也没找到个如何一步步搭建项目出来的文章,于是在github上找到了一个开源项目clone下来用作学习参考。在此也写下记录来总结下自己的学习过程。

自己对es6,vue2.0的这种模块化项目构建方式十分十分不熟悉,除了js和页面布局的基础,基本属于新手起步(本人现在水平,仅供参考:es6以前学习过一遍,但一直也没使用过,现在基本忘光了,就记得个let、const了。vue只接触过1,而且没有做过移动端。目前本人工作中使用的是angular1和ionic来做移动端,现在学习这个也是希望能更新下自己的知识,主要的是想学习下这种项目构建方式,熟悉webpack等工具,慢慢过渡到使用es6和熟悉模块化、工程化的思想)。这篇文章也希望将来能帮到一些同样基础的小伙伴能在之后的学习过程中有一个借鉴,同时也希望看到这篇文章的大腿能指点一些学习中问题和不足,感谢!

这篇文章属于自己边学边写,可能更新过程中,会有不少疏漏的地方和错误的地方,在这个过程中我也会进行修改,请知悉!

学习项目地址 -- jeneser

一.项目下载与运行

通过git clone拷贝下整个项目到本地,然后通过npm run dev看下效果

遇到的问题:

1.在此我遇到了第一个问题,运行npm run dev时狂报错,之后发现是8080端口被占用,找了半天也没找到谁在占用端口 - -

解决方法:

1.修改douban/build/dev-server.js中的port

var uri = 'http://localhost:' + '80'
devMiddleware.waitUntilValid(function () {
    console.log('> Listening at ' + uri + '\n')
    })
module.exports = app.listen(80, function (err) {
    if (err) {
        console.log(err)
        return
    }
    // when env is testing, don't need open it
    if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') {
        opn(uri)
    }
})

这里我是将port写死为固定的80端口,80可以为任意未被占用的端口。至此,项目已经可以在本地正常运行。

已找到问题来源,在本地的eclipse中开启了服务,占用了8080端口。

后续又有新发现,这个port的参数其实是取自douban/config/index.js中配置的值,这里设置了webpack dev的一些参数,其中将dev的端口设置了8080,如果你的端口也有占用情况,可以在这里修改为一个没被占用的端口或者结束掉占用即可。

二、创建项目文件夹、搭建项目基础

1.安装nodist(也可以用nvmw或直接全局安装随意,搞个node环境出来就行)、全局安装webpack和vue-cli。创建项目文件夹,通过vue init webpack 项目名创建项目模版

2.通过npm i来下载各依赖项

3.运行npm run dev来测试模版是否下载成功

遇到的问题

1.在第二步下载依赖时一直报错,查看日志发现是下载node-sass报错,在网上查找解决方(node-sass下载报错解决方案)如下:

解决方案

1)在运行npm i前,在根目录创建.npmrc文件(直接在目录中创建不被允许,可以通过ide软件先加载项目目录后,再在根目录创建自定义文件即可)

2)创建完成后在.npmrc文件中复制如下代码:

sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/
electron_mirror=https://npm.taobao.org/mirrors/electron/
registry=https://registry.npm.taobao.org

需注意在发布时需将最后一行注释。

三、查看项目目录及文件

查看学习项目的目录构成,打开各个文件浏览下源码。对比浏览器中打开的页面,理清整个应用的搭建框架,跳转逻辑。

遇到的问题

1.在查看跳转逻辑时,未找到SubjectView.vue应该如何跳转过去
2.在查看router/index.js的源码是对router的配置生疏

解决方案

1.手动在浏览器中输入url http://localhost/#/pages/book/subject/2654496 随意输的 居然蒙出来一个

在写文档的时候突然发现这个url中的book有点眼熟啊,不就是在主页时点击header的图书跳转进来的页面地址嘛。那后续的部分估计就是在图书也点一个书后的地址了。随便点击一个书目试了试果然如此,同理去点了电影也进来了这个详情页面,正好这个也对应上了SubjectView.vue页面源码的图书电影两个if判断,real chun - -

2.重新去vue-router的官网学习了一遍,详细了解了一下嵌套路由children、命名路由name、动态路由匹配(动态路径参数/:id)、命名视图(一个页面中有多个router-view标签,分别展示不同的视图view)、重定向redirect。同时参考源码的路由配置index.js,对整个页面跳转逻辑有了比较清晰的理解。但对于vue-router的学习仍然比较初步,后续文档并没有看完,在后续可以进行补充学习。

四、认真学习vuex大坑

在看源码的过程中,发现数据,业务方法自己都没有理清顺序,数据在什么地方,为什么这么写,怎么实现数据传递,反正乱七八糟地啥都没看明白,因此,文档先写到这里,要去补vuex的坑了。 - -

参照官网看了一遍文档,目前只看到了modules,还没看完,先写下今天的总结:

在看到actions之后,对于整个vuex的整体思路有了大致的了解,明白了它的运作过程(仅限使用)。在这里对整个自己的理解稍作整理。

首先,State对象里放置的是数据,这里的数据目前的粗浅理解是那种需要进行请求的。

然后是Getters,额...忘记了(明天再去补一下)。

重新看了下getters,作用其实挺简单的,估计是看过就忘了。getters的作用在于,当我们取得数据并存入state中后,在实际的页面中想要使用数据时,发现有些数据我们想要对它进行一些处理,比如说5个字的标题,我们想让他在3个字后添加个逗号,那我们就可以在getters中定义个方法来对数据进行下处理,然后在页面中取getters方法中返回的值,而不是直接拿state的值。

之后是Mutations和Actions,这两个对象中放的都是方法,区别在于mutations中的方法是用于修改state中的数据的,而且只有在mutations中的方法才可以直接对state进行修改,特别注意的一点是这个修改必须是同步的,也就是说,mutations中的方法一执行state中的数据就必须即可生效,so,不能在这里进行异步操作,例如请求数据再赋值之类的。再之后是actions,既然mutations中要求不能进行异步,那肯定就必须要解决这个问题,所以需要进行异步操作时的函数就要写在actions中了。同时推荐引入一个自己习惯使用的promise语法,本例中使用的是superagent,但之前看官网好像推荐的是axios,可以进行下学习。这里的重点是,actions中异步请求完得到数据是不可以直接对state中的数据进行变动的,需要在actions中进行commit也就是调用mutations中已定义好的你需要使用的方法来对state进行变动。

最后是Modules,首先我们要明确一点是,数据肯定是在state中的,那当项目大,视图多时,不同的视图的数据、mutations、actions啥的全放一个文件中显然就不太合适了,不仅看着冗长,而且不易于后续的维护。因此Modules就是解决这个问题的,我们可以像例子中那样将不同view的store分别定义一个js文件例如book.js、movie.js等然后将各view所需的state、mutations等分别放入各自的文件中,在通过Modules分别引入进来,不仅使文件结构清晰,后续代码维护也方便不少。modules没看完,感觉水有点深,后面的命名空间啥的没仔细研究,大致过了一下,看的迷糊糊的,就当先有个印象,之后有需要再去研究。

其实在现在这个点,我最大的疑惑是vue文件中的script标签中定义的data数据和store中state中的数据,什么数据应该写在哪里,为啥这样写不是很理解。

对于数据该放哪里,目前的理解是只单纯作用与本view的一些数据例如一个v-if='flag',来控制dom的显示隐藏,那这个flag就可以写在vue文件的data中,然后在methods中写个方法来改变它的值,其他的写到store中去。当然要是实在暂时搞不明白,全写store去得了。这个还需要后续认真研究下。

五、啥不会学啥

目前看来用vue2搭建一个单页面应用使用到的东西其实也不少,es6、vue2、vuex、vue-router、scss(可选)、一个好用的ui库、axios(数据请求)。

另外还要学习下webpack的基础知识,不求会写,但还是要看懂一些主要东西都是在设置啥,另外npm的package.json还是要学一下的。

六、主体搭建

其实到了这里,一个基础项目的搭建和框架的使用就有比较明确的认知了。通过vue-cli新建出项目主体,index.html、webapck的配置就都完成了,自己完善下main.js、写好router配置框架。就可以从app.vue开始写自己的.vue文件,开始页面制作了。路由可以在页面制作过程中慢慢去完善,当然如果你最初就有良好的构思,也可以直接写完,但一般在项目中都会不停改东西的吧。

七、发布

不会。

八、总结

这个例子的文件构建和写法思路其实就很符合我心中期望的前端模块化,估计再大型一些的项目文件的构建和js内容的书写上就又有区别了,但目前我也接触不到那么大的项目,还是先学好这个起步吧。

最后,这篇文章并没有啥技术性的东西,纯粹是一个上手思路,也是因为我自己在上手时搜了半天也没见到这种类似的文章,在开始强行入门时看着这么多文件,搞不清关系,看不懂逻辑,完全不知道我开始个项目要如何下手。因此记录下来自己的一个学习过程,给后续学习的小伙伴们一个借鉴,当然,文章中如果有疏漏,带偏了路概不负责呀。

6.8更新

在照着源码自己照搬时,写完hearderbar组件在运行时报错。对照报错信息发现是自己文件夹中依赖项不全,对照源码package.json和自己文件夹发现少了一些东西,补上后需重新 npm i,同时发现在webpack.config中缺少scss的rule,需手动添加

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库...
    卞卞村长L阅读 1,638评论 0 8
  • 爱情,神秘的情愫,突如其来,挥之即去。 校园的白鸽放飞希翼纯白的梦,也许你看到的是白的,也许是五彩的。问你一个简单...
    云生亦云阅读 319评论 0 1
  • 秋秋歌 强说愁,却怨秋。自古逢秋悲寂寥。入秋遥盼秋尽日, 金秋何错草木凋。将进酒,登高望。知己好友一壶酒。三...
    华胥君阅读 215评论 0 0
  • 今天一有空就看这张图片。 图片上有一个大概十三,四岁的初中生,趴在书桌上睡着了。脸贴着书本,头上还...
    nannanl阅读 133评论 0 1
  • “不,不要,爷爷,我不想离开家,你带我回去吧,爷爷……”她一边跑着一边声嘶力竭的向着山下远去的身影喊着,就算唯一的...
    煌箜阅读 237评论 0 3