【学习记录】vue 学习分享

ps: 因为公司业务需求,最近学习了一段时间Vue+node,关于哪个前端框架更好,仁者见智,
这里列一下前端各框架性能对比 Vue vs React / Vue vs AngularJs

关于vue全家桶 vue-cli + vue-router + vuex + axios

一、 脚手架新建项目 vue-cli

# 全局安装 vue-cli
$ npm install --global vue-cli
# 创建一个基于 webpack 模板的新项目
$ vue init webpack my-project
# 安装依赖,走你
$ cd my-project
$ npm run dev
项目目录

二、 Vue的路由 vue-router

vue-router在全家桶里面定位是什么呢? 前端路由、创建单页应用!

# 摘自vue-router官方解释
用 Vue.js + vue-router 创建单页应用,是非常简单的。
使用 Vue.js ,我们已经可以通过组合组件来组成应用程序,
当你要把 vue-router 添加进来,我们需要做的是,
将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们

vue的核心概念是组件(components),vue-router将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们!

关于路由的使用

1、在App.vue中新建视图 --- 渲染到哪


App.vue

2、 路由页面(router/module/index)编写路由 --- 渲染什么模块


image.png

module1、module2分文件夹,是解决大型项目路由复杂的问题。业务复杂度不高的可以直接把index.js文件拿出来

如果出现使用 ()=>import(@/component/index),加载组件报错的问题,可能是其他方式构建的项目,没有使用babel,或者缺少babel插件syntax-dynamic-import,解决办法参考: vue-router按需加载

3、 路由配置好之后,路由怎么跳转
路由按照上面的写法就配置好了各个路由,那么在页面之间需要路由跳转怎么做呢?

a. 标签导航 <router-link to="/foo">Go to Foo</router-link>
b. 编程式导航  $router.push()、$router.replace()

查看详细: vue-router

三、axios(vue-resource已经不再维护,vue2.0官方推荐使用axios)

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。

  • 从浏览器中创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求数据和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF
//get
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

文档地址: github中文翻译

项目整合Axios的方法
1、全局注册axios,适用于请求较少的项目
在main.js中加入如下代码:

import axios from 'axios'
Vue.prototype.$http = axios
全局注册

2、封装

//新建一个JS命名为api
import axios from 'axios' 
//在api中导入axios
let base = '/v1'

//把整个项目的网络请求都写在这个文件中用export导出

export const getproduct = params => { return axios.get(`${base}/product/info/${params}`) }

//这样写方便管理整个项目的网络请求
//在我们要是用这个请求时比如说getproduct

import {
    getproduct
  }from '../api/api';
export default {
  name: 'HelloWorld',
  data () {
    return {
      params:{}
    }
  },
  methods: {
    getProductList(){
      getproduct(this.params).then(result=>{
        console.log(result);
      })
    }
  }
}
//注意我们导出的时候用的是export 所以导入的时候必须带{}

扩展:利用Aixos实现前端实现登录拦截

跨域请求

跨域请求是web开发必须解决的一个问题。搞不定没有数据,就只能GAMEOVER了。 看这里不焦急~

不同域名之间的访问,需要跨域才能正确请求。跨域的方法很多,通常都需要后台配置
不过 Vue-cli 创建的项目,可以直接利用 Node.js 代理服务器,实现跨域请求【正向代理】

1、在 config>index.js 的 dev 中添加配置项 proxyTable:

  • '/api' 为匹配项
  • target 为被请求的地址
配置代理

参考:
Vue-cli 创建的项目如何跨域请求
前端开发如何独立解决跨域问题 --- 这篇文章是标题党

Vue 知识点总结

vue 的核心思想是,数据驱动和组件化。

1、MVVM数据驱动,有别于传统jq+bootstrap的技术栈,代码组织的时候,需要摒弃操作dom的想法,一切皆数据!一切交互的操作,都是对数据的修改~


数据驱动

2、组件化,其实就是把页面进行分块处理,分成多个小块,每个小块就是一个组件,这样可以形成组件的复用,而且提高开发效率。
把应用根据功能拆分为一个个颗粒度合理的组件,需要一些项目锻炼。
扩展: 编写良好的前端组件

组件树

3、指令
文本{{ }} 、 v-html、v-show、v-if、v-else、v-if-else、v-once、v-bind、v-for、v-on、

区别点

a. v-if vs v-show

v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

b. v-for 列表渲染

# 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。
# 如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,
# 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。
#  so. 列表渲染,被渲染组件要有唯一的key值,不应该使用index作为key值,否则会产生bug
<div v-for="item in items" :key="item.id">
  <!-- 内容 -->
</div>

:key="index" 复现bug

4、修饰符
.prevent 、.stop 、.laze

5、 组件通信 --- 数据的流动

  • 组件内部通讯(data、computed)


    data/computed
  • 父组件 => 子组件 (props)
    当子组件想访问父组件的值的时候,我们可以通过子组件的props属性,将父组件的值传递给子组件

单向数据流
Vue采用的是单向数据流方式,数据只能从父组件流向子组件,
子组件不能修改父组件传入的数据,否则Vue会给与警告。
props
  • 子组件 => 父组件
    官网推荐的方法是在子组件中通过v-on绑定自定义事件来实现
    每个 Vue 实例都实现了事件接口,即:
    使用 on(eventName) 监听事件 使用emit(eventName) 触发事件
    这个的运行跟我们常用的dom原生的事件机制是一样的。父组件注册好监听事件,当子组件需要对父组件进行操作的时候,调用触发函数,触发事件。
    代码案例: Vue子组件传值给父组件

  • 非父子组件的相互通信


    event bus

状态管理模式 vuex

slot分发内容

为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板。这个过程被称为内容分发 (即 Angular 用户熟知的“transclusion”)。Vue.js 实现了一个内容分发 API,参照了当前 Web Components 规范草案,使用特殊的 <slot> 元素作为原始内容的插槽。

    使用slot的好处就是可以定制个性化组件结构
单个插槽
具名插槽

子组件将数据像props一样,传递到父组件中,使得父组件根据数据映射视图,并插入到子组件slot的位置。。

这个功能太变态。。。 实在不明白这样搞有什么用。。。

vue知识点扩展:

vue技术栈扩展:

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

推荐阅读更多精彩内容

  • 使用rest-assrued框架做接口自动化测试,框架的发掘来自于一次沙龙的学习,愿意更深入学习的同学可参考:ht...
    by小杰阅读 2,395评论 0 4
  • 今天16团队开大组会,讨论团队的走向。 团队成员每个人都发言,都说有什么什么收获。但是,在我看来,我认为16团队很...
    谭皓匀阅读 468评论 0 3
  • Sir知道有人等这条稿子很久了。 该来的总会来。 恩—— 近日,《金刚:骷髅岛》曝光首支预告花絮。 最大亮点,不是...
    Sir电影阅读 3,317评论 8 23