通过前一段时间基础的学习,笔者最近将会持续更新关于vue的优质文章,也会坚持输出,但是自我感觉不是很好,所以在一个月黑风高的夜晚,决定撰写这个系列,希望大家可以多多的支持我哦.如果文章有什么错误的地方,希望读者可以及时指正,我也会第一时间进行修改.最后,感谢各位读者们~~
**
1.vue框架介绍
既然是学习vue.js那么首先就应该知道vue.js到底是什么,在这里笔者就不多做解释了,因为现在官方文档说的是十分清楚,所以我们可以来看下官方的解释,至少笔者觉得官方说的很清楚,哈哈哈
Vue (读音 /vjuː/,类似于 ``**view**``) 是一套用于构建用户界面的``**渐进式框架**``。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
2.框架和库的区别
- js库: js库就是对某个功能的封装, 小而巧, 对项目的侵入性不是特别大, 我们需要主动调用库文件所提供的功能代码实现特定业务功能
- 框架: 大而全, 对整个项目的侵入性比较大, 框架的功能更完善, 会提供项目最基本的目录结构, 我们只需要将对应的代码放在框架约定的文件或者目录中, 框架在特定的时间会调用我们的代码
2.1-特点
- 入门门槛比较低
- 数据驱动视图更新
- vue中不建议操作dom
- 基于组件化的开发方式
3-下载以及安装
- 手动下载
- 通过npm在线下载
javascript npm i vue -S // 或者 npm install vue --save
4-vue基础语法
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 1-引入vue.js --><script src="./libs/vue.js"></script></head><body><!-- 2-容器 --><div id="app"><!-- 插值表达式: 特殊的占位符 --><h1>{{pageTitle}}</h1><hr><h3>{{msg}}</h3></div></body><!-- 3-书写逻辑代码 --><script>// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{pageTitle:'网站首页',msg:'hello vue'}});</script></html>
5-插值表达式
<div id="app"><!-- 插值表达式: 特殊的占位符 --><!-- 字符串连接 --><h1>{{pageTitle+'~~~'}}</h1><hr><!-- 调用系统方法 --><h3>{{msg.toUpperCase()}}</h3><hr><!-- 调用自定义方法 --><h3>{{reverse(msg)}}</h3><hr><!-- 条件判断: 三元表达式 --><h3>{{age>=18?'恭喜您, 终于成年了':'好好享受美好的童年'}}</h3><hr><!-- 数学运算 --><h3>{{age+10}}</h3></div>
// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{pageTitle:'网站首页',msg:'hello vue',age:17},// 定义方法methods:{// 实现字符串翻转reverse(str){return str.split('').reverse().join('');}}});
6-指令
- 指令: 是vue中的一种特殊的语法, 指令的本质其实是一个特殊的函数, 这个函数的调用方式比较特殊, 当做自定义属性来调用
- 语法: 当做自定义属性使用
6.1-v-text
- 作用: 在模板中输出变量
- 语法: 当做自定义属性使用
- 特点: 只会原样输出变量中的内容, 不会对标签进行解析```html
```javascript// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{pageTitle:'网站首页',msg:'hello vue',age:17},// 定义方法methods:{// 实现字符串翻转reverse(str){return str.split('').reverse().join('');}}});
6.2-v-html
- 作用: 在模板中输出变量
- 特点: 解析变量中的标签
- 案例```html
```javascript// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{pageTitle:'网站首页',content:`<h1>新闻标题</h1><hr/><p>新闻内容</p>`}});
6.3-v-bind
- 作用: 动态指定属性值
完整语法:
html <div v-bind:属性名="属性值"></div>简写语法
html <div :属性名="属性值"></div>案例```html
```javascript// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{url:'./imgs/28.png'}});
6.4-v-show
- 作用: 控制元素的显示和隐藏
- 可选值: true(显示), false(隐藏)
语法
html <div v-show="true"></div>控制元素隐藏的原理: 通过css的方式实现元素隐藏, display:none
- 应用场景: 频繁切换显示状态, 建议选择v-show, 性能开销更小
- 案例```html
```javascript// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{url:'./imgs/28.png',isShow:true}});
6.5-v-if
- 作用: 控制元素的显示和隐藏
- 可选值: true(显示), false(隐藏)
语法
html <div v-if="true"></div>控制元素隐藏的原理: 销毁DOM
- 应用场景: 如果不是频繁切换显示状态, 可以使用v-if
- 组合指令
- v-else-if: 不能单独使用, 必须v-if结合起来使用
- v-else: 不能单独使用, 必须v-if结合起来使用, 不需要指定条件
- 案例```html
不及格
及格
良好
优秀
成绩不合法
```javascript// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{// 60>score>=0: 不及格// 60<=score<=70 及格// 70<score<80 良好// 80<=score<=100 优秀// 否则: 成绩不合法score:90}});
6.6-v-on
- 作用: 注册事件
语法
html <div v-on:事件名称="事件处理函数"> </div>简写
html <div @事件名称="事件处理函数"> </div>案例```html
```javascript// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{msg:'hello'},// 定义方法methods:{handle:function(){// 调用其他方法this.log();alert('点击事件处理函数执行了:'+this.msg);},log(){console.log(new Date().toLocaleDateString());}}});
6.7-v-once
- 作用: 当在某个标签上使用了v-once, 那么vue只会对当前的标签编译一次, 如果过标签中引用的数据发生了更新, 视图是不会刷新的
语法
html <div v-once>{{msg}}</div>案例```html
没有使用v-once指令:{{msg}}
使用了v-once指令:{{msg}}
```javascript// 创建实例对象const vm=new Vue({// 模板容器的idel:'#app',// 定义数据data:{msg:'hello'},// 定义方法methods:{update(){// 更新msgthis.msg='你好'}}});
6.8-v-for
- 作用: 循环输出
基础语法
html <h1 v-for="模板变量 in 目标数据">{{模板变量}}</h1>案例
循环遍历数组```html
{{index}}-{{item}}
```javascriptnew Vue({data:{arr:['vue','react','angular']}});
循环遍历对象```html
{{index}}—-{{key}}—-{{item}}
```javascriptnew Vue({data:{user:{nickname:'jack',age:20,sex:'男'}}});
循环遍历数值
html <h1 v-for="(item,index) in 5">{{index}}---{{item}}</h1>循环遍历字符串
html <h1 v-for="(item,index) in 'hello'">{{index}}---{{item}}</h1>
key属性
- 保证key属性的值, 唯一不重复
- 一般而言, key属性需要一个数值或者字符串作为他值
- 在数据和视图层建立一个一一对应关系, 方便进行状态保持

<table border="1" width="400" height="300"><tr><td></td><td>id</td><td>姓名</td></tr><!-- key:一般需要动态绑定保证key属性的值, 唯一不重复一般而言, key属性需要一个数值或者字符串作为他值作用: 在数据和视图层建立一个一一对应关系, 方便后期进行局部更新--><tr v-for="item in list" v-bind:key="item.id"><td><input type="checkbox"></td><td>{{item.id}}</td><td>{{item.name}}</td></tr></table>
new Vue({el:'#app',data:{list:[{id:4,name:'jack'},{id:3,name:'pony'},{id:2,name:'robin'},{id:1,name:'charlse'}]}});
7-样式的设置
7.1-动态设置style
普通写法```html
```javascriptnew Vue({el:'#app',data:{styleObj:{width:'100px',height: '100px',backgroundColor:'aqua'},// 中间变量: true表示要添加样式, false表示不需要添加样式flag:false},methods:{toggleStyle(){// 更新中间变量flag的值this.flag=!this.flag;}}});
数组写法```html
```javascriptnew Vue({el:'#app',data:{// 样式对象styleObj1:{width:'100px',height: '100px',},styleObj2:{backgroundColor:'aqua'},// 控制尺寸样式hasSize:false,// 控制背景样式hasBg:false},methods:{// 切换尺寸toggleSize(){this.hasSize=!this.hasSize;},// 切换背景toggleBg(){this.hasBg=!this.hasBg;}}});
7.2-动态设置class
.border{border:4px solid green;}.size{width: 200px;height: 200px;}.bg{background-color: brown;}.font{font-size: 40px;font-weight: 700;text-align: center;}
new Vue({el:'#app',data:{// 保存css选择器的变量border:'border',size:'size',bg:'bg',font:'font',// 中间变量hasBorder:false,hasSize:false,hasBg:false,hasFont:false},methods:{toggle(attr){this[attr]=!this[attr];}}});
普通写法
html <div :class="border+' '+size+' '+bg"> hello </div>数组写法
html <div :class="[hasBorder?border:'',hasSize?size:'',hasBg?bg:'',hasFont?font:'']"> hello </div>对象写法
html <div :class="{border:hasBorder,size:hasSize,bg:hasBg,font:hasFont}"> world </div>
8-关于tab切换的案例```html
```javascriptnew Vue({el:'#app',data:{// 当前需要默认显示的内容块current:1},methods:{tab(index){// 更新currentthis.current=index;}}});
9-结尾
今日份分享就到这里了,如果觉得本篇文章对您有用的话,可以麻烦您给笔者点亮那个点赞按钮。您的支持将是我继续写文章前进的动力,我们下篇文章见。奥利给
