vue 初步学习感悟

?xml version="1.0" encoding="UTF-8"?

首先,阐明一下我是一名iOS开人员,学习vue完全是因为项目需求,期间碰到了好多问题,马马虎虎建立了一个中台,虽然写的不是很好,但是作为第一个用vue开发项目,希望记录下来整个过程,开发时候怎么学习以及遇到的问题,可能大家没有遇到过,不喜勿喷。。。谢谢!

一、认识vue学习vue

用于开发的一门新的语言我是从官网看的vue的基础知识,从而了解vue,只要要怎么写,具体的还没有深入的去解析,因为时间的不允许,快速开发,只看结果。

总结:vue的界面分为三块:        实际上个人觉得就是将html5的开发的模块儿分开(很浅显的认识,只用于初学的不懂的,我也不是很懂),在template里面写布局,当然js还是在script里面  格式实在style。

因为前端是要展示给用户看的,所以当时为了能快点把界面搞出来,很迫切的想要知道代码写在哪儿,怎么才能展示出来呢,这就是下面的流程的介绍,这个网上有很多,给大家一个链接,当时我也是看了这个才把工程建造出来的,http://blog.csdn.net/fungleo/article/details/53171052,这里面是作者从搭建到开发显示流程,比较清晰,为作者打call。但是其中我个人遇到的问题的想说一下:

(1)、项目创建之初vue-cli 命令行一键创建的时候有一个地方是是否需要选择标准的开发语言,这个建议选NO,因为当时我选了yes之后,只要稍微有一点格式的不正确就会报错,选择了NO之后,就不用那么拘束了,也不会报错

(2)、上述流程里面的网络请求的封装我觉得很重要,毕竟我们的界面要请求数据,官网也好,度娘也好都建议用axios ,说vue-router不在维护,那么就涉及到了封装,上述流程作者封装了一个不带请求头的js,因为我们的网络请求是要携带头部信息的,所以要自己搞,这需要看看axios的介绍以及用法,可以百度。下面粘贴出我的修改:

// 引用axios

var axios = require('axios')

var CryptoJS = require("crypto-js/core")

var MD5 = require("crypto-js/md5")

var baseUrl = '/v1'

// 封装axios的get方法post方法put方法等

// 自定义判断元素类型JS

function toType (obj) {

return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()

}

// 参数过滤函数

function filterNull (parameters) {

for (var key in parameters) {

if (parameters[key] === null) {

delete parameters[key]

}

if (toType(parameters[key]) === 'string') {

parameters[key] = parameters[key].trim()

} else if (toType(parameters[key]) === 'object') {

parameters[key] = filterNull(parameters[key])

} else if (toType(parameters[key]) === 'array') {

parameters[key] = filterNull(parameters[key])

}

}

return parameters

}

// 网络请求深层封装

function httpService (method, urlStr, params,flag,success, failure){

// 过滤函数  怕有空或者不行的

// if (params) {

//  params = filterNull(params)

//    }

// 需要拼接的头部信息

var timestampMm = Date.parse(new Date()) // 时间戳

var timestampTemp = ''+timestampMm

var timestamp = timestampTemp.substring(0,10)

var nonce // 随机数

function MathRand () {

var Num = ''

for (var i = 0; i < 6; i++) {

Num += Math.floor(Math.random() * 10)

}

nonce = Num

}

MathRand()

var Numbers = nonce +  timestamp    // 拼接

var first_md5 = CryptoJS.MD5(Numbers)              // 加密

var first_md5_str = '' + first_md5

var first_md5_upper = first_md5_str.toLocaleUpperCase()   // 转大写

var firstmdStr = '' + first_md5_upper

var linkStr = 'b3c7e662782266fddd6f950059d3b812'

var link_end = linkStr + firstmdStr

var link_end_md = CryptoJS.MD5(link_end)

var link_end_mdStr = ''+link_end_md

var finalStr = link_end_mdStr.toLocaleLowerCase()

var second_md5 = ''+finalStr

// 通过将相关配置传递给 axios 来进行请求

axios({

// 请求方式

method: method, // 默认

// `url`是将用于请求的服务器URL

url: urlStr,

/// `baseURL`将被添加到`url`前面,除非`url`是绝对的。

// 可以方便地为 axios 的实例设置`baseURL`,以便将相对 URL 传递给该实例的方法。

baseURL: baseUrl,

// `transformRequest`允许在请求数据发送到服务器之前对其进行更改

// 这只适用于请求方法'PUT','POST'和'PATCH'

// 数组中的最后一个函数必须返回一个字符串,一个 ArrayBuffer或一个 Stream

//    transformRequest: [function (data) {

// 做任何你想要的数据转换

//        return data;

//    }],

// `headers`是要发送的自定义 headers

headers: {'App-Key':'Holo_WeiXin','Timestamp':timestamp,'Nonce':nonce,'Authorization':'','Signature':second_md5,'Content-Type':'application/x-www-form-urlencoded;charset=utf-8'},

// 拼接到url后面的

params: method === 'GET' || method === 'DELETE' ? params : null,

// `data`是要作为请求主体发送的数据

// 仅适用于请求方法“PUT”,“POST”和“PATCH”

// 当没有设置`transformRequest`时,必须是以下类型之一:

// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams

// - Browser only: FormData, File, Blob

// - Node only: Stream

data: method === 'POST' || method === 'PUT' ? params : null,

cache:false,

//    auth:'',

// `timeout`指定请求超时之前的毫秒数。

// 如果请求的时间超过'timeout',请求将被中止。

//    timeout: 2000,

// `withCredentials`指示是否跨站点访问控制请求

// should be made using credentials

withCredentials: false, // default

// “responseType”表示服务器将响应的数据类型

// 包括 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'

responseType: 'json', // default

})

.then(function (response) {

console.log(response);

success(response)

})

.catch(function (error) {

console.log(error);

});

}

// 返回在vue模板中的调用接口

export default {

get: function (url, params,flag, success, failure) {

return httpService('GET', url, params,flag,success, failure)

},

post: function (url, params,flag, success, failure) {

return httpService('POST', url, params,flag,success, failure)

},

put: function (url, params,flag, success, failure) {

return httpService('PUT', url, params,flag, success, failure)

},

delete: function (url, params,flag, success, failure) {

return httpService('DELETE', url, params,flag, success, failure)

}

}

大家看到的第四行,这个就是解决跨域的问题,我在进行网络请求的时候一直会遇到这个问题,因为我做iOS的     时候没有遇到过,刚开始也不懂最后查才知道,这个是跨域。

等大家做完项目的时候就会打包给后台让放到线上的服务器,但是开发的时候不用,这就要分开说解决这个跨域的问题。开发环境下比较简单,因为vue是基于node的服务,在生成的文件config下面的index.js,找到dev对应的地方,也就是开发情况的配置里面会有 proxyTable: {},这个就是解决开发环境下跨域的地方,这个意思就是把你要访问的域名代理到本地,访问的是127.0.0.1:8080,但是实际上跨域成功访问的是你的域名,我的是这样的

'/v1': {

target: 'http://api.holo.hk/', // 你接口的域名

secure: false,

changeOrigin: false,

}

而打包完之后呢,这个需要后台来配置反向代理,我自己用apache虚拟了一个本地主机,我就将我需要访问的域名在虚拟的主机做了代理,(简单说一下虚拟本地主机的流程:

1.命令行执行sudo su

2.数据电脑的开机密码

3.进入可编辑模式:(我用的xampp的apache)vim /Applications/XAMPP/etc/httpd.conf

你会看到所有的LoadModule都是打开的不用管,你要看

# Virtual hosts

Include etc/extra/httpd-vhosts.conf

你要看Include前面有没有#注释,要有的话去掉,要不然没办吧建立虚拟主机应该是,还有要看的是

User xxxxx

ServerAdmin xxxx@holo.hk

这个是我改过的,原来的是 User daemon  ,百度说是可以解决forbidden,要是还不行就看

AllowOverride  none

Require all denied

 改成

#AllowOverride none

#Require all denied

Order allow,deny

Allow from all

)现在上代码:

ServerAdminzhoucen@holo.hk

DocumentRoot "/Users/zhoucen/servers"

ServerNamewww.zcshop.com

ErrorLog "/Users/zhoucen/servers/Logs/error.log"

CustomLog "/Users/zhoucen/servers/Logs/access.log"  common

就是这个地方加上:

到此为止就把代理的配置介绍完毕,如果后台用的其他的服务器那就让后台自己去配置,本来这就不是前端做的事。

这样我觉得我开发过程中最重要的事情就讲完了。下面来讨论下开发的文件

很重要的文件:

main.js  是开发的入口吧,一般的是,我在里面导入全局的变量,可以全局使用,比如封装的网络请求,使用的elementui。

app.vue 这个就是能够展示你的视图的地方,相当于你写的那些视图都是从这里开始的。

router.js 这个很重要,单页面应用,这个路由也就是我们说的路径,跳转什么的都是根据他,还有就是一个路由下面会有子路由,这就是分层次。比如说你有一个home.vue,但是home.vue又分了很多的模块儿,比如left.vue ,right.vue,top.vue 等等,那就把这个子模块儿的路由都放在home的路由下面,这样就很方便进行操作。

数据存储也是我们经常用的,我在这里用的是sessionstoreage,当然这些模块儿需要导入工程, npm install 模块儿的名字。

钩子也是很重要的,比如说我们登录之后点击浏览器后退在前进又能进来,这是不允许的,所以这个时候钩子就很重要。全局的钩子就是这个作用。

第一次写记录,很乱,接下来我会再次整理,希望那些遇到跟我一样情况的能够从我的经历中解决个问题,大神就别来了。

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

推荐阅读更多精彩内容