美文网首页
vue 初步学习感悟

vue 初步学习感悟

作者: 一粒小小尘埃 | 来源:发表于2017-11-25 17:57 被阅读0次

?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 模块儿的名字。

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

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

相关文章

  • vue 初步学习感悟

    ?xml version="1.0" encoding="UTF-8"? 首先,阐明一下我是一名iOS开人员,学习...

  • Vue学习初步

    v-cloak 解决插值表达式方法渲染闪烁问题,如果vue控制区域内的标签上面加了v-cloak,在网速不够无法请...

  • vue之Helloworld

    一,vue核心框架为vue.js, 初步学习可不使用vue.cli, 可在本地引入vue.js或vue.min.j...

  • vue 初步学习记录

    题前话:之前接手了我们公司的半成品Vue项目,由于自己不是做网页前端的,自己初步看了下Vue相关东西,今天才算是把...

  • Vue 初步学习积累

    1. v-for 遍历 2. v-if 判断 登陆判断 常与v-else搭配(明白v-if和v-show的区别) ...

  • Vue.js初步学习

    1 Vue官网 https://cn.vuejs.org/ 2 Mvvm模式 Model-View-View-Mo...

  • Vue.js初步学习(二)--初步使用

    1026--使用需知1、引进方式:(1) 可以直接通过script标签引进: (2)也可以下载js文件到本地,其中...

  • 第十六节:Vue生命周期与钩子函数

    前沿:通过前面几节的学习,我们已经对vue有了初步的了解,vue可以帮我们干什么,而接下来就介绍vue的生命周期和...

  • vue-cli构建vue项目

    vue-cli是快速构建vue单页应用的脚手架。在学习了官网的教程,对vue有个初步了解之后,可以开始使用脚手架搭...

  • vue2.0 项目搭建

    vue 初步环境搭建 1. cnpm install vue 安装 vue2.0 2. cnpm install...

网友评论

      本文标题:vue 初步学习感悟

      本文链接:https://www.haomeiwen.com/subject/flicbxtx.html