学习Vue---1.Vue核心
渐进式 JavaScript 框架,用来动态构建用户界面
1.特点
遵循 MVVM 模式
- 编码简洁,体积小,运行效率高,适合 移动/pc 端开发
- 它本身只关注 UI,可以轻松引入 vue 插件或其它第三方库开发项目
2.与其他前端 JS 框架的关联
- 借鉴 angular 的模板 和 数据绑定技术
- 借鉴 react 的组件化 和 虚拟 DOM 技术
3.Vue 扩展插件
- vue-cli:vue 脚手架
- vue-resource(axios):ajax 请求
- router" title="vue-router">vue-router:路由
- vuex:状态管理(它是 vue 的插件但是没有用 vue-xxx 的命名规则)
- vue-lazyload:图片懒加载
- vue-scroller:页面滑动相关
- mint-ui:基于 vue 的 UI 组件库(移动端)
- element-ui:基于 vue 的 UI 组件库(PC 端)
二、Vue 的基本使用
1.编码
引入Vue.js
创建 Vue 对象
el:指定根 element (选择器)
data:初始化数据(页面可以访问)
双向数据绑定:v-model
显示数据:{{xxx}}
理解 vue 的 mvvm 实现
<!--template模板--><div >
<input type="text" v-model="msg"><br><!--指令-->
<input type="text" v-model="msg"><!--指令-->
<p>hello {{msg}}</p><!--大括号表达式-->
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
const vm = new Vue({ // 配置对象 options
// 配置选项(option)
el: '#test', // element: 指定用vue来管理页面中的哪个标签区域
data: {
msg: 'atguigu'
}
})
</script>
2.MVVM --> model-view-viewModel
model:模型,数据对象(data)
view:视图,模板页面
viewModel:视图模型(vue 的实例)
MVVM 本质上是 MVC (Model-View- Controller)的改进版。即模型-视图-视图模型。
模型
指的是后端传递的数据,视图
指的是所看到的页面。
视图模型
是 mvvm 模式的核心,它是连接 view 和 model 的桥梁。它有两个方向:
- 将
模型
转化成视图
,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。 - 将
视图
转化成模型
,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。
这两个方向都实现的,我们称之为数据的双向绑定。
三、模板语法
1.模板的理解
- 动态的 html 页面
- 包含了一些 JS 语法代码:
- 双大括号表达式
- 指令(以 v- 开头的自定义标签属性)
2.双大括号表达式
- 语法:{{exp}}
- 功能:向页面输出数据
- 可以调用对象的方法
3.指令
指令一:强制数据绑定
- 功能:指定变化的属性值
- 完整写法:v-bind:xxx='yyy' //yyy会作为表达式解析执行
- 简洁写法::xxx='yyy'
指令二:绑定事件监听
- 功能:绑定指定事件名的回调函数
- 完整写法:v-on:keyup='xxx',v-on:keyup='xxx(参数)',v-on:keyup.enter='xxx'
- 简洁写法:@keyup='xxx',@keyup.enter='xxx'
四、计算属性和监视
1.计算属性
- 在 computed 属性对象中定义计算属性的方法(什么时候执行?初始化显示/相关的data属性数据发生改变
- 回调函数满足三个条件:你定义的;你没有调用;但最终它执行了
- 回调函数需要知道两件事:什么时候调用;用来做什么
- 在页面中使用 {{方法名}} 来显示计算的结果
2.监视属性
- 通过 vm 对象的
$watch()
或watch 配置
来监视指定的属性 - 当属性变化时,回调函数自动调用,在函数内部进行计算
3.计算属性高级
- 通过 getter/setter 实现对属性数据的计算读取 和 变化监视
- getter:属性的ge方法
- setter:属性的set方法
- 计算属性存在缓存,多次读取只执行一次 getter 计算
五、class 与 style 绑定
- 在应用界面中, 某个(些)元素的样式是变化的
- class/style 绑定就是专门用来实现动态样式效果的技术
1.class 绑定::class='xxx'
- 表达式是字符串: 'classA'
- 表达式是对象: {classA:isA, classB: isB}
- 表达式是数组: ['classA', 'classB']
2.style 绑定
:style="{ color: activeColor, fontSize: fontSize + 'px' }" 其中 activeColor/fontSize 是 data 属性
六、条件渲染条件渲染指令
- v-if + v-else
- v-show
如果需要频繁切换 v-show 较好。当条件不成立时, v-if 的所有子节点不会解析。
七、列表渲染
1.列表显示指令
- 数组:v-for/index
- 对象:v-for/key
2.列表的更新显示
1.删除item:变更方法,顾名思义,会变更调用了这些方法的原始数组。
// 两种更新方式this.persons[index] = newP
// 这样只更新persons中的某一个数据,vue根本就不知道,视图不会更新
this.persons.splice(index, 1, newP)
// splice方法被 Vue 将进行了包裹,所以也将会触发视图更新。
vue本身只是监视了persons的改变,没有监视数组内部数据的改变;
Vue重写了数组中的一系列改变数组内部数据的方法(先原生,更新界面)--->数组内部改变,界面自动变化
这些被包裹过的方法包括:
- push()
- pop()
- shift()
- unshift()
- splice():增删改
- sort()
- reverse()
2.替换item:相比之下,也有非变更方法,例如 filter()
、concat()
和 slice()
。它们不会变更原始数组,而总是返回一个新数组。当使用非变更方法时,可以用新数组替换旧数组。
let fpersons = persons.filter(p => p.name.includes(searchName)
)
3.列表的高级处理
- 列表过滤
- 列表排序
fpersons.sort(function (p1, p2) {if (orderType === 1) { // 降序
return p2.age - p1.age
} else { // 升序
return p1.age - p2.age
}
})
八、事件处理
1.绑定监听
1) v-on:xxx="fun"
2) @xxx="fun"
3) @xxx="fun(参数)"
4) 默认事件形参: event, 隐含属性对象:
$event
就是当前触发事件的元素,即使不传 $event
,在回调函数中也可以使用 event 这个参数。
2.事件修饰符
事件修饰符用来控制事件的冒泡和默认行为。
1) .prevent : 阻止事件的默认行为event.preventDefault()
2) .stop : 停止事件冒泡event.stopPropagation()
<!-- 阻止事件冒泡 --><div >
<div ></div>
</div>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>
3.按键修饰符
1) .keycode : 操作的是某个 keycode 值的键
2) .keyName : 操作的某个按键名的键(少部分)
<!-- 任何按键按下都会触发回调函数 --><textarea @keyup="testKeyup"></textarea>
<!-- 下面的两种写法效果是一致的 -->
<!-- 使用按键码,回车键的keyCode是13 -->
<textarea @keyup.13="testKeyup"></textarea>
<!-- 使用按键修饰符,因为回车键比较常用,所以vue为他设置了名称,可以直接使用enter来代替 -->
<textarea @keyup.enter="testKeyup"></textarea>
九、表单输入绑定
使用 v-model 对表单数据自动收集
1) text/textarea
2) checkbox
3) radio
4) select
十、vue 实例生命周期
1.生命周期流程图
2.vue 生命周期分析
初始化显示(1次)
- beforeCreate()
- created()
- beforeMount()
- mounted():初始化显示之后立即调用
更新显示:this.xxx = value(n次)
- beforeUpdate()
- updated()
销毁 vue 实例:vm.$destroy()(1次)
- beforeDestory():死亡之前调用
- destoryed()
3.常用的生命周期方法
- created()/mounted():发送 ajax 请求,启动定时器等异步任务
- beforeDestroy():做收尾工作,如:清除定时器
十一、过渡&动画
1.vue 动画的理解
操作 css 的 transition 或 animation
vue 会给目标元素添加/移除特定的 class
过渡的相关类名
xxx-enter-active:指定显示的 transition
xxx-leave-active:指定隐藏的 transition
xxx-enter/xxx-leave-to:指定隐藏时的样式
2.基本过渡动画的编码
在目标元素外包裹
<transition name="xxx">
定义 class 样式
指定过渡样式:transition
指定隐藏时的样式:opacity/其它
十二、过滤器
1.理解过滤器
1) 功能: 对要显示的数据进行特定格式化后再显示
2) 注意: 并没有改变原本的数据, 可是产生新的对应的数据
2.定义和使用过滤器
定义过滤器:
Vue.filter(filterName, function(value[,arg1,arg2,...]){// 进行一定的数据处理
return newValue
})
使用过滤器 :
<div>{{myData | filterName}}</div><div>{{myData | filterName(arg)}}</div>
其中,myData 会作为 value 传入 filter 中。
十三、内置指令与自定义指令
1.常用内置指令
1) v-text : 更新元素的 textContent
2) v-html : 更新元素的 innerHTML
3) v-if : 如果为 true, 当前标签才会输出到页面
4) v-else: 如果为 false, 当前标签才会输出到页面
5) v-show : 通过控制 display 样式来控制显示/隐藏
6) v-for : 遍历数组/对象
7) v-on : 绑定事件监听, 一般简写为@
8) v-bind : 强制绑定解析表达式, 可以省略 v-bind
9) v-model : 双向数据绑定
10) ref : 指定唯一标识, vue 对象通过$refs 属性访问这个元素对象
11) v-cloak : 防止闪现, 与 css 配合: [v-cloak] { display: none }
2.自定义指令
el:指令所在的标签对象
binding:包含指令相关数据的容器对象
1) 注册全局指令 :
Vue.directive('my-directive', function(el, binding){el.innerHTML = binding.value.toupperCase()
})
2) 注册局部指令 :
directives: {'my-directive'(el, binding) {
el.innerHTML = binding.value.toupperCase()
}
}
3) 使用指令 :v-my-directive='xxx'
(binding.value 就是 xxx 的值)
十四、自定义插件
1.说明
1) Vue 插件是一个包含 install 方法的对象
2) 通过 install 方法给 Vue 或 Vue 实例添加方法,定义全局指令等
2.其他 API
vm.$nextTick([callback])
用法:将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick
一样,不同的是回调的 this
自动绑定到调用它的实例上。
用途:需要在视图更新之后,基于新的视图进行操作。
//改变数据vm.message = 'changed'
//想要立即使用更新后的DOM。这样不行,因为设置message后DOM还没有更新
console.log(vm.$el.textContent) // 并不会得到'changed'
//这样可以,nextTick里面的代码会在DOM更新后执行
Vue.nextTick(function(){
console.log(vm.$el.textContent) //可以得到'changed'
})
十五、创建VUE项目
1.vue-cli3/4 的项目文件目录
目录/文件 | 说明 |
---|---|
build | webpack相关的配置文件夹(基本不需要修改) dev-server.js:通过express启动后台服务器 |
config | webpack相关的配置文件夹(基本不需要修改) |--index.js:指定的后台服务的端口号和静态资源文件夹 |
dist | 项目打包后生成的文件 |
node_modules | npm加载的项目依赖模块 |
public | 静态资源目录,如图片、字体、icon图标 ,其中里面的index.html是模板,当运行npm run build打包的时候,就是以这里的index.html作为模板打包 输出 到dist 文件夹下生成一个新的 index.html文件 |
src | 包含了如下几个目录及文件: assest: 放置一些图片,如logo等 components: 这里一般用来放置一些公共的组件 App.vue:应用组件,我们写的所有组件都是在这个组件之上运行的 main.js: 项目的核心文件,入口js文件 router: 路由文件夹,决定页面路由的跳转规则 store: vuex的状态管理文件 common: 存放一些公共的js文件 |
package.json | 项目的配置文件,以及一些插件依赖包的信息 |
package-lock.json | 插件依赖的详细信息 |
babel.config.js | 用来配置一些ui插件 |
README.md | 项目的说明文档,markdown格式 |
2.使用组件的三步骤
3.项目的打包与发布
打包:npm run build
发布:
- 使用静态服务器工具包:npm install -g serve,serve dists,访问:http://localhost:5000
- 使用动态web服务器(Tomcat):
- 修改配置:webpack.prod.conf.js,output:{publicPath:'/xxx/' //打包文件夹的名称}
- 重新打包:npm run build
- 修改dist文件夹为项目名称:xxx
- 将xxx拷贝到运行的tomcat的webapps目录下
4.ESLint
代码规范检查工具,官网:http://eslint.org/
支持:ES、JSX、style教程、自定义错误和提示;
校验:语法错误,不重要或丢失的标点符号;没法运行到的代码块;未被使用的参数提醒;确保样式的统一规则,如sass或者less;检查变量的命名。
规则的错误等级:
- 0:关闭规则;
- 1:打开规则,并且作为一个警告(信息打印黄色字体)
- 2:打开规则,并且作为一个错误(信息打印红色字体)
可以在.eslintignore里面设置不需要检查的文件夹或文件
参考链接:
【1】https://www.bilibili.com/video/BV1Wp411d7Ur?p=57
【2】Vue 全家桶 | Woc12138
【3】面试题
【4】vue构造函数(根实例化时和组件实例对象选项)参数:选项详解_weixin_30755393的博客-CSDN博客
以上是 学习Vue---1.Vue核心 的全部内容, 来源链接: utcz.com/z/375265.html