Vue.js中前端知识点总结笔记
1.框架和库的区别:
框架:framework 有着自己的语法特点、都有对应的各个模块
库 library 专注于一点
框架的好处:
- 1.提到代码的质量,开发速度
- 2.提高代码的复用率
- 3.降低模块之间的耦合度
- (高内聚低耦合)
UI:user interface
GUI : graphical user interface
CLI : command line interface
API : application interface
思维模式的转换:
- 从操作DOM的思维模式 切换到 以数据为主
2.Vue概述
- 1、what
- 是一个渐进式的构建用户界面的js框架
- 2、where
- 小到的简单的表单处理,大到复杂的数据操作比较频繁的单页面应用程序
- 3、why
- 1.方便阅读的中文文档
- 2.容易上手 (学习曲线比较缓和)
- 3.体积小
- 4.基于组件化的开发方式
- 5.代码的可读性、可维护性得到了提高
- 4、how
- 工作方式:可以通过丰富的指令扩展模板,可以通过各种各样的插件来增强功能
- 搭建环境:
- 方式1
- 全局安装 vue-cli
- $ npm install --global vue-cli
- # 创建一个基于 webpack 模板的新项目
- $ vue init webpack my-project
- # 安装依赖,走你
- $ cd my-project
- $ npm install
- $ npm run dev
- 方式2:
- 直接引入对应的js文件
3.Vue中基础知识
- 1、双花括号
- mustache(胡子)/interpolation(插值表达式)
- 语法:
- <any>{{表达式}}</any>
- 作用:
- 将表达式执行的结果 输出当调用元素的innerHTML中;还可以将数据绑定到视图
- 2、指令-循环指令
- 基本语法1:
- <any v-for="tmp in array"></any>
- 基本语法2:
- <any v-for="(value,index) in array"></any>
- 作用:
- 在遍历array这个集合时,将临时变量保存在tmp中,创建多个any标签
- 3、指令-选择指令
- 语法:
- <any v-if="表达式"></any>
- <any v-else-if="表达式"></any>
- <any v-else="表达式"></any>
- 作用:
- 根据表达式执行结果的真假,来决定是否要将当前的这个元素 挂载到DOM树
- 4、指令-事件绑定
- 语法:
- <any v-on:eventName="handleEvent"></any>
- 作用:
- 给指定的元素 将handleEvent的方法绑定给指定eventName事件
- 5、指令-属性绑定
- 基本语法:
- <any v-bind:myProp="表达式"></any>
- 补充,支持简写:
- <any :myProp="表达式"></any>
- 作用:
- 将表达式执行的结果 绑定 到当前元素的myProp属性
- <img v-bind:src="'img/'+myImg" alt="">
- 动态样式绑定
- <p :style="{backgroundColor:myBGColor}">动态样式绑定</p>
- 动态样式类绑定
- <h1 :class="{myRed:false}">动态样式类的绑定</h1>
- 6、指令-双向数据绑定
- 方向1:数据绑定到视图
- 方向2:将视图中(表单元素)用户操作的结果绑定到数据
- 基本语法:
- <表单元素 v-model="变量">
- </表单元素>
4.组件化
- 所谓的组件化,就像玩积木一样,把封装的组件进行复用,把积木(组件)拼接在一起,构成一个复杂的页面应用程序。
- 组件树就是由各个组件构成的一种数据结构,它存在的意义是为了帮梳理应用程序
- 1、组件的创建
- 全局组件
- Vue.component('my-com',{
- template:`
- <h2>it is a header</h2>
- `
- })
- 局部组件
- new Vue({
- components:{
- 'my-footer':{
- template:''
- }
- }
- })
- 2、组件使用
- 作为普通的标签去使用
- <my-com></my-com>
- 3、注意事项
- 1.组件的id和使用方式 遵循烤串式命名方式:a-b-c
- 2.如果一个组件 要渲染多个元素,将多个元素放在一个顶层标签中,比如div、form
- 3.全局组件可以用在id为example的范围内的任何一个组件内部,直接调用可以;但是局部组件只能在父模板中直接调用
5.自定义指令
- 1、创建和使用
- Vue.directive('change',{
- bind:function(el,bindings){
- //首次调用
- },
- update:function(el,bindings){
- //只要是有数据变化,都会调用
- },
- unbind:function(){
- //解绑
- }
- })
- <any v-change="count"></any>
6.过滤器
过滤器是针对一些数据 进行筛选、过滤、格式化等相关的处理,变成我们想要的数据
过滤器的本质 就是一个带有参数带有返回值的方法
Vue1. 支持内置的过滤器,但是Vue2. 就不再内置过滤器,但是支持自定义过滤器。
1、过滤器的创建和使用
- 1.创建
- Vue.filter(
- 'myFilter',
- function(myInput){
- //myInput是在调用过滤器时,管道前表达式执行的结果
- //针对myInput,按照业务需求做处理
- //返回
- return '处理后的结果'
- })
- 2.使用
- <any>{{expression | myFilter}}</any>
2、如何在调用过滤器时,完成参数的发送和接受
- 1.发送
- <any>{{expression | myFilter(参数1,参数2)}}</any>
- 2.接受
- Vue.filter('myFilter',function(myInput,参数1,参数2){
- return '处理后的结果'
- })
7.复合组件
- 知识回顾:
- Vue.component('my-header',{
- template:`<div></div>`
- });
- <my-header></my-header>
- 复合组件:并不是新的概念,就是一个组件,只不过这个组件中 可以调用其他的组件
- 注意事项:
- 1.组件要渲染的内容 取决于在定义组件时template
- <my-list>
- <my-item></my-item>
- </my-list>
- 效果是出不来的
- 2.允许在一个组件中,直接来调用另外一个组件
8.生命周期
- 四个阶段:
- create 准备工作 (数据的初始化。。。)
- mount 挂载前后针对元素进行操作
- update 数据发生变化,
- destroy 清理工作 (关闭定时器、集合清空..)
- beforeCreate/created
- beforeMount/mounted
- beforeUpdate/updated
- beforeDestroy/destroyed
9.常用属性
- 1、watch
- 1. 表单元素的双向数据绑定
- v-model="myValue"
- 2.监听
- watch:{
- myValue:function(newValue,oldValue){
- }
- }
- 2、computed
- 计算属于是用于在模板中,搞定复杂的业务逻辑,因为有依赖缓存。
- 1.指定计算属性
- computed:{
- myHandle:function(){
- return 数据
- }
- }
- 2.调用
- <any>{{myHandle}}</any>
10.组件间通信
- 1、父与子通信 (props down)
- 1.发送
- <son myName='zhangsan'>
- </son>
- 2.接受
- 到son组件:
- Vue.component('son',{
- props:['myName'],
- template:`
- <p>{{myName}}</p>
- `
- })
- 2、子与父通信 (events up)
- 1.绑定
- methods:{
- handleEvent:function(msg){}
- }
- <son @customEvent="handleEvent"></son>
- 2.触发
- 子组件内部:
- this.$emit(‘customEvent’,100);
- 3、ref(reference 引用/参考 外号)
- 帮助在父组件中 得到子组件中的数据、方法。
- 1.指定ref属性
- <son ref="mySon"></son>
- 2.根据ref得到子组件实例
- this.$refs.mySon
- 4、$parent
- this.$parent得到父组件的实例
- 5、兄弟组件通信
- 1.var bus = new Vue();
- 2.接收方
- bus.$on('eventName',function(msg){})
- 3.发送方
- bus.$emit('eventName',123);
11.补充组件创建的方式
- 1、直接在template属性中指定模板内容
- 1.全局组件
- Vue.component
- 2.局部组件
- {
- components:{
- 'my-footer':{template:``}
- }
- }
- 2、.vue结尾的文件
- <template></template>
- <script></script>
- <style></style>
- 3、单独指定一个模板内容
- <script
- id='myContent'
- type='text/x-template'>
- </script>
- Vue.component('',{
- template:'#myContent'
- })
12.路由模块
路由模块的本质 就是建立起url和页面之间的映射关系
1、SPA的基本概念和工作原理
- SPA:single page application 单一页面应用程序,只有一个完整的页面;
- 它在加载页面时,不会加载整个页面,而是只更新某个指定的容器中内容。
- 比如Gmail、移动的webApp
- 工作原理:
- 1.解析地址栏
- 完整的页面地址、路由地址
- 2.根据路由地址 从路由词典中找到真正的要加载的页面
- 3.发起ajax请求
- 请求要加载的页面
- 4.像指定的容器中 插入加载来的页面
2、路由模块的基本使用
- 专业术语:
- router路由器
- route路由
- routes 路由数组(路由词典)
- 1.引入vue.js vue-router.js
- 2.指定一个容器
- <router-view></router-view>
- 3.创建业务所需要用到的组件类
- var MyLogin = Vue.component()
- 4.配置路由词典
- const myRoutes = [
- {path:'',component:MyLogin},
- {path:'/login',component:MyLogin}
- ];
- const myRouter = new VueRouter({
- routes:myRoutes
- })
- new Vue({
- router:myRouter
- })
- 5.测试
- 修改地址栏中的路由地址,测试看加载的组件是否正确
- 注意事项:
- 1.先引入vue,再引入插件
- 2.一定要指定router-view
- 3.route路由 {path:'',component:}
- routes 路由数组 []
- router 路由器:按照指定的路由规则去访问对应的组件 new VueRouter
3、使用路由模块来实现页面跳转的方式
- 方式1:直接修改地址栏
- 方式2:js
- this.$router.push(‘路由地址’);
- 方式3:
- <router-link
- to="路由地址"></router-link>
4、完成参数的传递
- 在页面之间跳转的时候,在有些场景下,需要同时指定参数
- 1.明确发送方和接收方
- list --20--> detail
- 1.配置接收方的路由地址
- /detail --》 /detail/:index
- this.$route.params.index
- 2.发送
- routerLink to="/detail/20"
- this.$router.push('/detail/20')
5、路由嵌套
- 在一个路由中,path对应一个component,如果这个component需要根据
- 不同的url再加载其他的component,称之为路由的嵌套
- 举例:比如A组件现在需要根据不同的url,加载B组件或者C组件
- 1.给A组件指定一个容器
- <router-view></router-view>
- 2.配置路由词典
- {
- path:'/a',
- component:A,
- children:[
- {path:'/b',component:B}
- ]
- }
- 需求:现在有两个组件,分别是login/mail,建立SPA。
- 在此基础上,希望mail组件 嵌套inbox/outbox/draft
- 补充:在设置子路由,路由匹配规则依然是适用的,
- 只不过路由地址为空和异常,要携带父组件的路由地址
- /mail /mail/draft
13.搭建基于CLI开发环境的方式
- 1.指定一个文件夹
- C:\xampp\htdocs\framework\vue\project
- 2.将tpls.zip拷贝到project中
- 3.右键单击压缩包,解压缩到当前文件夹
- 4.进入到tpls
- 5.同时按下shift和鼠标右键,选择在此位置打开命令行串口
- 6.执行npm install
- 7.执行npm start
14.axios
1.axios的get方法
- export const getAjax= function (getUrl,getAjaxData) {
- return axios.get(getUrl, {
- params: {
- 'getAjaxDataObj1': getAjaxData.obj1,//obj1为getAjaxData的一个属性
- 'getAjaxDataObj2': getAjaxData.obj2
- }
- })
- }
2.axios的post方法
- export const postAjax= function (getUrl,postAjaxData) {
- return axios.get(postUrl, {
- 'postAjaxDataObj1': postAjaxData.obj1,//obj1为postAjaxData的一个属性
- 'postAjaxDataObj2': postAjaxData.obj2
- })
- }
3.axios的拦截器
主要分为请求和响应两种拦截器,请求拦截一般就是配置对应的请求头信息(适用与常见请求方法,虽然ajax的get方法没有请求头,但是axios里面进行啦封装),响应一般就是对reponse进行拦截处理,如果返回结果为[]可以转化为0
1.请求拦截:将当前城市信息放入请求头中
- axios.interceptors.request.use(config => {
- config.headers.cityCode = window.sessionStorage.cityCode //jsCookie.get(‘cityCode’)
- return config
- },
2.响应拦截:处理reponse的结果
- axios.interceptors.response.use((response) =>{
- let data = response.data
- if(response.request.responseType === 'arraybuffer'&&!data.length){
- reponse.date=0
- }
- })
转载出处:Web前端开发 » 前端知识点总结——VUE
Vue.js中前端知识点总结笔记的更多相关文章
- 公司内部技术分享之Vue.js和前端工程化
今天主要的核心话题是Vue.js和前端工程化.我将结合我这两年多的工作学习经历来谈谈这个,主要侧重点是前端工程化,Vue.js侧重点相对前端工程化,比重不是特别大. Vue.js Vue.js和Rea ...
- 使用webpack+vue.js构建前端工程化
参考文章:https://blog.csdn.net/qq_40208605/article/details/80661572 使用webpack+vue.js构建前端工程化本篇主要介绍三块知识点: ...
- vue.js中父组件触发子组件中的方法
知识点:vue.js中,父组件的method中,触发子组件中的方法,获得子组件中的定义的属性 (1)子组件 : child_crud.js var html_child_crud= "< ...
- Vue.js高效前端开发 • 【Vue基本指令】
全部章节 >>>> 文章目录 一.Vue模板语法 1.插值 2.表达式 3.指令概述 4.实践练习 二.Vue绑定类样式和内联样式 1.Vue绑定类样式 2.Vue绑定内联样式 ...
- Vue.js高效前端开发 • 【初识Vue.js】
全部章节 >>>> 文章目录 一.Vue概述 1.Web前端框架介绍 2.MVC和MVVM 3.Vue介绍 4.安装Vue 二.Vue使用 1.第一个Vue应用 2.Vue的双 ...
- Vue.js高效前端开发知识 • 【目录】
持续更新中- 章节 内容 实践练习 Vue.js高效前端开发 • (实践练习) 第1章 Vue.js高效前端开发 • [ 一.初识Vue.js ] 第2章 Vue.js高效前端开发 • [ 二.Vue ...
- 【vue.js权威指南】读书笔记(第二章)
[第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...
- vue.js中,input和textarea上的v-model指令到底做了什么?
v-model是 vue.js 中用于在表单表单元素上创建双向数据绑定,它的本质只是一个语法糖,在单向数据绑定的基础上,增加了监听用户输入事件并更新数据的功能: 对,它本质上只是一个语法糖,但到底是一 ...
- 实例分析Vue.js中 computed和methods不同机制
在vue.js中,有methods和computed两种方式来动态当作方法来用的 1.首先最明显的不同 就是调用的时候,methods要加上() 2.我们可以使用 methods 来替代 comput ...
随机推荐
- GCC/gcc/g++/CC/cc区别
平常在Linux上经常会用到gcc或者g++来编译程序,但对这两者的理解也就停留在一个是用来编译C程序,另一个是用来编译C++程序的(请注意:这种说法是有问题的,待会改进). 1. GCC GCC,是 ...
- 未能加载文件或程序集“file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0
未能加载文件或程序集"file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports for .NET Framewor ...
- Socket层实现系列 — bind()的实现(一)
bind()函数的使用方法很简单,但是它是怎么实现的呢? 笔者从应用层出发,沿着网络协议栈,分析了bind()的系统调用.Socket层实现,以及它的TCP层实现. 本文主要内容:bind()的系统调 ...
- os X下mds_stores占用大量cpu的解决办法
有时候发现, MacOS中, 有个叫做mds_stores的进程占了好多CPU, 于是要阻止这个行为, 据说这是MacOS在建索引然后只要把这个索引的关掉就好了 sh-3.2# mdutil -a - ...
- C++之虚函数
<span style="font-size:18px;">#include <iostream> using namespace std ; class ...
- SpringBoot使用Maven插件打包部署
[问题] 之前一直用SpringBoot做一些小项目,想打包部署在环境上,总是少依赖包jar.百度下可以通过Spring Boot Maven plugin插件,把Maven配置的依赖包都打到项目包里 ...
- Netstat状态分类
用netstat -an命令查看!再stat下面有一些英文,简单说一下这些英文具体都代表什么: LISTEN:(Listening for a connection.)侦听来自远方的TCP端口的连接请 ...
- linux下redis单机版搭建
1.1.什么是redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下: ...
- hadoop配置文件详解系列(二)-hdfs-site.xml篇
上一篇介绍了core-site.xml的配置,本篇继续介绍hdfs-site.xml的配置. 属性名称 属性值 描述 hadoop.hdfs.configuration.version 1 配置文件的 ...
- Hive入门学习--HIve简介
现在想要应聘大数据分析或者数据挖掘岗位,很多都需要会使用Hive,Mapreduce,Hadoop等这些大数据分析技术.为了充实自己就先从简单的Hive开始吧.接下来的几篇文章是记录我如何入门学习Hi ...