Vue.js的使用经验
 

Vue.js的意义

  • 解耦了视图与数据
  • 可复用的组件
  • 前端路由
  • 状态管理
  • 虚拟DOM

Vue提供了很多实例属性与方法,都以$开头

  • $el可以访问挂载Vue实例的元素。
  • $set可以修改Vue实例的数据内容
  • $event可以访问原生DOM事件
  • $emit()触发事件
  • $on()监听子组件事件
  • $parent访问组件的父组件
  • $children访问组件的子组件
  • $refs可以取得子组件的索引名称
  • $nextTick下一个事件循环
  • $mount()可以手动挂载一个未挂载对实例,Vue.extend可以创建一个实例
  • $route访问路由信息
  • $router路由实例对象
  • $store获取Vuex中的仓库store
  • $options可以获取定义在data外的数据和方法

Vue常用的指令

  • v-model
  • v-html(输出HTML而不是纯文本)
  • v-pre(使用 {{}}时跳过编译过程)
  • v-if v-else-if v-else(条件渲染)
  • v-show(CSS属性切换)
  • v-bind(动态更新HTML元素上的属性)
  • v-on
  • v-cloak(在简单的项目中可以解决初始化慢导致页面闪动的问题)
  • v-once(组件只渲染一次)
  • v-for(可以遍历数组和对象的属性)

绑定class的几种方式

  • 给v-bind:class设置一个对象,这个对象可以有多个属性,当某个属性为true时,元素便拥有该类名。
  • 给v-bind:class绑定一个数组,类名为数组元素对应的值。
  • 对象语法和数组语法也可以使用在组件上,但该组件的最外层必须是根元素,否则失效。

绑定内联样式的方式和绑定class相似


修饰符

Vue支持在@绑定的事件后加修饰符来达成某种特定功能

  • .stop(阻止冒泡)
  • .prevent(不再重载页面)
  • .capture(使用事件捕获模式)
  • .self(只在事件发生在元素自身上才触发事件)
  • .once(只触发一次)
  • .lazy(用在输入框中,会转变为在change事件中同步)
  • .number(用在输入框中,可以将输入变为Number类型)
  • .trim(用在输入框中,可以过滤输入的首尾空格)

组件通信

  • 父组件向子组件传值:props
  • 子组件向父组件传值:自定义事件(v-on监听子组件,在子组件内用$emit(‘事件名’,传递的数据)触发事件)
  • 非父子组件传值:中央事件总线(bus),父链和子组件索引(在子组件标签上定义ref的值,父组件中使用this.$refs访问对应子组件),Vuex

自定义指令

注册自定义指令分为全局注册和局部注册
//全局注册
Vue.directive('command',{
//指令选项
})
//局部注册
var app = new Vue({
el:'#app',
derective:{
command:{
//指令选项
}
}
})

指令选项由几个钩子函数组成

  • bind(指令第一次绑定到元素时调用)
  • inserted(被绑元素插入父元素时调用)
  • update(被绑元素更新时调用)
  • componentUpdated(被绑元素所在模版完成更新周期时调用)
  • unbind(解绑时调用)
每个钩子函数都有几个可用参数
  • el(指令所绑定元素)
  • binding(一个对象,包含name(指令名),value(指令的绑定值),oldValue(前一个绑定值),expression(绑定值的字符串形式),arg(传给指令的参数),modifiers(修饰符的对象))
  • vnode(虚拟节点)
  • oldVnode(上一个虚拟节点)

路由跳转

vue-router有两种跳转页面的方式
  • 使用内置的<router-link>组件,最终会被渲染为<a>标签
  • 使用router实例的方法($router有push(可以跳转页面),replace(替换掉当前页面,不会向history添加新纪录),go(可以前进或者后退页面))
vue-router有两个导航钩子
  • beforeEach(在路由改变之前触发)
  • afterEach(在路由改变之后触发)
导航钩子函数有3个参数
  • to(要进入的路由对象)
  • from(即将离开的路由对象)
  • next(调用此方法后才能进入下一个钩子)

状态管理与Vuex

  • 数据保存在state字段内并且只能读取,可以通过$store.state取得
const store = new Vuex.Store({
state:{
count : 0
}
})

  • mutations可以修改state内的数据,通过this.$store.commit(方法名)方法可以执行mutations,通常在mutations处理同步的数据
mutations:{
increment(state){
state.count++;
},
decrease(state){
state.count--;
}
}

  • getter可以将组件写在计算属性中的内容进行封装,可以通过$store.getters访问
getters:{
filteredList:state = >{
return state.list.filter(item => item < 10);
}
}

  • action可以异步操作state的数据,可以通过$store.dispatch触发,并且内部提交的是mutation,相当于异步中转mutation的操作
mutations:{
increment(state,n = 1){
state.count += n;
}
},
actions:{
increment(context){
   context.commit('increment');
  }
}

  • 当项目足够大时,会用到modules将store分为多个store,每个store拥有自己的state,mutations,getters,actions
 

Vue.js的使用经验的更多相关文章

  1. 前端开发工具vue.js开发实践总结

    最近有很长时间没有更新博客了,换了公司,全部的心思都放在项目上了.通过这次项目的上线,让我感受最深的是前后端分离后,前端页面的模块化管理,以及前端页面的数据邦定.在接触vue.js之前,我之前端要用到 ...

  2. Vue.js—快速入门

    Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...

  3. 我从Angular 2转向Vue.js, 也没有选择React

    译者按: 通过使用Angular的经历,作者已经完全转为Vue粉了!我们Fundebug目前还是用AngularJS 1,坦白说,学习曲线蛮陡的. 原文: Why we moved from Angu ...

  4. Vue.js是什么,vue介绍

    Vue.js是什么,vue介绍 Vue.js 是什么Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用. ...

  5. Vue.js—快速入门及实现用户信息的增删

    Vue.js是什么 Vue.js 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目 ...

  6. Vue.js学习笔记(一) - 起步

    本篇将简单介绍一下Vue.js,并在Node.js环境下搭建一个简单的Demo. 一.简介 我个人理解,Vue.js是一套前端视图层的框架,它只关心视图展示和数据绑定,它的一些语法与Angular 1 ...

  7. 公司内部技术分享之Vue.js和前端工程化

    今天主要的核心话题是Vue.js和前端工程化.我将结合我这两年多的工作学习经历来谈谈这个,主要侧重点是前端工程化,Vue.js侧重点相对前端工程化,比重不是特别大. Vue.js Vue.js和Rea ...

  8. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  9. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

  10. 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?

    引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...

随机推荐

  1. 二、typora软件的安装与markdown语法

    目录 一.typora软件的安装与使用 1.软件的安装 2.破解使用的方法 3.功能描述(markdown语法讲解) 标题 小标题 语言环境 表格 表情 图片 查看源代码 数学公式 流程图 高亮文本 ...

  2. H5商城项目源码 (可预览 测试有效)

    商城简介 这个商城项目由首页模块,发现模块,购物车模块以及我的等四大模块组成了33个相关内容界面 预览下载直通车 预览地址 首页模块 首页拥有搜索模块.分类模块.内容模块组成 发现模块 发现模块主要是 ...

  3. 文盘Rust -- 本地库引发的依赖冲突

    作者:京东科技 贾世闻 问题描述 clickhouse 的原生 rust 客户端目前比较好的有两个clickhouse-rs 和 clickhouse.rs .clickhouse-rs 是 tcp ...

  4. Module理解及使用

    ES6的模块化设计思想是静态化,也就是说,在编译的时候确定模块的依赖关系,以及输出输出入的变量.而CommonJS和AMD模块都是在运行时确定的.ES6的模块不是对象,而是通过export显示指定输出 ...

  5. 部署Kubernetes v1.22.10高可用集群

    一.概述 Kubernetes集群控制平面(Master)节点右数据库服务(Etcd)+其它服务组件(Apiserver.Controller-manager.Scheduler等)组成:整个集群系统 ...

  6. 搭建Git服务器教程(整理自腾讯云开发者实验室)

    搭建Git服务器教程(整理自腾讯云开发者实验室) 下载安装 Git Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统 ...

  7. K8S发布应用步骤详解

    前言 首先以SpringBoot应用为例介绍一下k8s的发布步骤. 1.从代码仓库下载代码,比如GitLab: 2.接着是进行打包,比如使用Maven: 3.编写Dockerfile文件,把步骤2产生 ...

  8. 题解 P4317 花神的数论题

    并不难,但是因为各种 SB 原因调了 1145141919810min(悲 我们会发现 \(\operatorname{sum}\) 其实很小,顶多就 \(50\),这启发我们统计每个 \(\oper ...

  9. Python_使用Python将一个文件夹下的多个文件夹中的图片复制到一个文件夹中

    代码: # coding=utf-8 import os import shutil #目标文件夹(最终要复制到的文件夹),此处为相对路径,也可以改为绝对路径 determination = '/.. ...

  10. LeetCode算法训练-贪心算法 455.分发饼干 376. 摆动序列 53. 最大子序和

    欢迎关注个人公众号:爱喝可可牛奶 LeetCode算法训练-贪心算法 455.分发饼干 376. 摆动序列 53. 最大子序和 前置知识 贪心算法核心是找局部最优解,通过局部最优推导出全局最优 Lee ...