02 - Vue 的基础指令

1 . Mustache 语法 -> 插值操作
  • Mustache 语法 - > 双大括号
  • Mustache : 胡子/胡须 {{ }}
1 . 1 可插入数据形式
  • 直接写变量
  • 简单表达式
1 . 2 实例
<body>
<div id="app">
  {{ms}}  <!-- Mustache  语法 -->
  {{ms + "zi"}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      ms: 'qi'
    }
  })
</script>
</body>
2 . 基础 Vue 指令
2 . 1 . v-once
  • 该指令后面不需要跟任何表达式
  • 该指令表示元素和组件只渲染一次, 不会随着数据的改变而改变
<div id="app" v-once>
  {{ms}}  <!--添加 v-once 后 该元素将会一直为第一次渲染上的数值, 并不会修改-->
  <button v-on:click="btnClick">Add</button>
</div>
2 . 2 . v-html
  • 将字符串 html 解析

  • 将从服务器请求到的数据(HTML) 代码, 按照 HTML 格式解析, 并且显示对应内容

  • 该指令后面往往会更上一个 string 类型, 并且会将 string 的 html 解析出来并且进行渲染

<body>
<div id="app" v-html="ms">
  {{ms}}  <!--将 HTML 格式代码输出显示 -->
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      ms: "<html> <div> <h2>qeqe</h2> </div> </html>"
    }
  })
</script>
</body>

image-20210127170732210

  • 若不添加结果为
    在这里插入图片描述
2. 3 . v-text
  • 用于将数据显示在界面
  • 通常情况下接收一个 string 类型
  • 缺点 : 会覆盖固定输入的内容
<body>
<div id="app" v-text="ms">
  {{ms}} 
  ziqi
</div>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      ms: "v-text"
    }
  })
</script>
</body>
  • 输出
    在这里插入图片描述
  • 使用
    在这里插入图片描述
2 . 4 . v-pre
  • 用于跳过这个元素和它子h元素的编译过程, 用于显示原本的 Mustache 语法
2 . 5 . v-cloak
  • cloak : 斗篷
  • 在某些情况下, 我们浏览器可能会直接显示未编译的 Mustache 标签, v-cloak 会将原生的 Mustache 采用自己定义页面内容的覆盖
2 . 6 . v-bind

动态绑定属性元素

  • 动态绑定属性, eg : a -> href, img -> src
  • 缩写 : :
  • 预期 : any (with argument) | Object (without argument)
  • 参数 : attrOrProp (optional)
<div id="app">  
    <img v-bind:src="imgURL" alt="">
</div>
<script>
    const app = new Vue({
        el : '#app',       //用于挂载要管理的元素
        data : {           //定于数据
            imgURL : 'https://avatars3.githubusercontent.com/u/75103425?s=60&v=4'
        }
</script>

  • bind 语法糖

    • v-bind 有一个语法糖, 也就是简写方式

      <div id="app">  
          <img :src="imgURL" alt="">
      </div>
      
  • v-bind 绑定 class

    • 对象语法 : 即 class 后面跟的是一个对象
    • 用法一 : 直接通过 { } 绑定一个类
    <h2 :class="{'active': isActive}">hello </h2>
    
    • 用法二: 也可以通过判断, 传入多个值
    <h2 :class="{'active': isActive, 'line': isLine}"> hello </h2>
    
    • 用法三 : 和普通的类同时存在, 并不冲突
      • 如果 isActive 和 isLine 都为 true , 那么会有title/active/line 三个类
    <h2 class="title" :class="{'active': isActive, 'line': isLine}">
         hello
    </h2>
    
    • 用法四 : 如果过于复杂, 可以放在一个 methods 或者 computed 中, classes 为一个计算属性
    <h2 class="title" :class="classes">  hello </h2>
    
  • 数组语法 : class 后面跟随的是一个数组

    • 用法一 : 直接通过 [ ] 绑定一个类
    <h2 :class="['active']">hello </h2>
    
    • 用法二 : 可以传入多个值
    <h2 :class="['active', 'line']">hello </h2>
    
    • 用法三 : 和普通的类同时存在并不冲突
    <h2  class="title" :class="['active', 'line']">hello </h2>
    
    • 用法四 : 如果过于复杂, 可以放在一个 methods 或者 computed 中, classes 为一个计算属性
    <h2 class="title" :class="classes">  hello </h2>
    
<style>
  .active {
    color: red;
    }
</style>
<div id="app">  
    <img v-bind:src="imgURL" alt="">
    <h2 :class="active">QI</h2>
</div>
<script>
    const app = new Vue({
        el : '#app',       //用于挂载要管理的元素
        data : {           //定于数据
            imgURL : 'https://avatars3.githubusercontent.com/u/75103425?s=60&v=4',
            active : 'active'
        }
</script>
  • 应用场景
    • 动态修改页面样式
    • 按照选择按钮动态选择样式

在这里插入图片描述

  • v-bind 绑定 class 数组

  • v-bind + v-for

<style>
    .qi {
        color: red;
    }
</style>
<div id="app">
    <ul>
        <li v-for="(item, index) in movies" :class="{qi : qi === index}" v-on:click="liClick(index)">{{item}}</li>
    </ul>
</div>

<script>
    const app = new Vue({
        el : '#app',     
        data : {          
            movies : ['黑猫警长', '火影忍者', '忍者神龟', '海尔兄弟'],
            qi : 0,
        },
        methods : {
            liClick : function(index){
                this.qi = index;
            }
        }
    })
</script>

v-bind 绑定 style

  • 我们可以利用 v-bind:style 来绑定一些 CSS 内联样式

  • CSS 属性名 格式

    • 驼峰式 : fontSize
    • 短横线分隔 : font-size
  • 绑定方式

    • 对象语法
    <h3 v-bind:style="{key(属性名): value(属性值)}">{{msg}}</h3>
    <!-- '50px' 必须加上单引号, 否则会当作一个变量去解析 -->
    <h3 v-bind:style="{fontSize: '50px'}">{{msg}}</h3>
    
    • Vue 解析数据
      • ’ ’ -> 当成字符串整体进行解析使用
      • 无单引号 -> 会到 Vue 实例中寻找对应对象引入使用
    • 数组语法
2 . 7 . V - ON
  • V - ON 事件监听

  • 作用 : 绑定事件监听器

  • 缩写 : @Statement | Object

  • 参数 : event

    • 如果方法不需要额外参数, 那么方法后的 () 可以不添加
    • 如果方法本身有一个参数, 那么会默认将原生事件event参数传递进去
    • 如果需要同时传入某个参数, 同时需要event时, 可以通过 $event 传入事件
  • 基本使用

  • 修饰符 :

    • .stop : 调用 event.stopPropagation()
    <div id="app" @click="divClick">
      <button @click.stop="btnClick">btnClick</button>
    </div>
    
    • .prevent - 调用 event.preventDefault()
      • 阻止默认事件得提交
    • .{keyCode | keyAlias} - 只当时间是从特定键触发时才触发回调
    • .native - 监听租金按根元素的原生时间
    • .once - 只触发一次回调
2 . 8 v- if , v- else-if , v- else
  • key - 对比组件复用问题
  • Vue 内部对组件复用问题
2 . 9 v-show
  • v-show 的用法和 v-if 非常相似, 也用于决定一个元素是否渲染
  • v-if 和 v-show 对比
    • 如何选择
    • v-if 当条件为 false 时, 不会有对应的元素在 DOM 中
    • v-show 当条件为 false 时, 仅仅是将元素的 idsplay 属性设置为 false
    • 开发中选择
2 . 10 V-for
  • 格式 : item in items 的形式

  • 有无索引情况

    • 无索引
      • item in items
    • 有索引
      • (item, index) in iems
      • 其中index就代表了取出的item在原数组的索引值
  • 遍历对象

    <li v-for="item in items"></li>
    <li v-for="(value, key) in items"></li>
    <li v-for="(value, key, index) in items"></li>
    
  • 官方推荐我们在使用 v-for 时, 给对应的元素或组件添加上一个 : key 属性

    <li v-for="item in items" :key="item"></li>
    
    • 这个与 Vue 的虚拟化 DOM 的 Diff 算法有关
    • 在一个数组列表节点加入新的元素时, Diff 算法默认执行是在 index 位置插入数据, 之后数据依次后移, 这样在虚拟化 DOM 渲染到 HTML 上的时候效率就不大可观
    • 所以我们需要使用 key 来给每一个节点做一个唯一标识
      • Diff 算法可以正确的识别到此节点
      • 找到正确的位置区直接插入新的节点
    • 所以 key 的作用主要是为了高效的更新虚拟化 DOM
    • ? li 渲染的格式是链表形式 ? ?
  • 数组中的响应式方法

    • push() 数组最后插入数据
    • pop() 数组删除最后一个元素
    • shift() 删除数组中第一个元素
    • unshift() 数组最前面插入元素
    • splice(a, b, c)
      • a -> index 数组下标, 只有a -> 删除a之后的所有元素
      • b -> 删除元素个数, 为0 -> 增加元素
      • c -> 添加的元素
      • 替换 b != 0 , c != null
    • reverse() 数组反转
    • Vue.set(a, b, c)
      • a : 要修改的对象
      • b : 索引值
      • c : 修改后的值
2 . 11 V-model
  • 表单控件在实际开发中是非常常见的
  • Vue 中使用 v-mdel 指令实现表单元素和数据的双刺昂绑定
<div id="app">
    <input type="text" v-model="msg">
    {{msg}}
</div>
  • 实现原理

    • v-model 其实是一个语法糖, 它的背后本质上是包含两个操作

      • v-bind 绑定一个 value 属性
      • v-on 指令给当前元素绑定 input 事件
    • <input type="text" v-model="msg">
      等同于
      <input type="text" :value="msg" @input="mag = $event.target.value">
      

在这里插入图片描述

  • v-model 结合 radio

在这里插入图片描述

  • v-model : checkbox

    • 单选
      • v-model 即为 布尔值
      • 此时input 的 value 不影响 v-model 的值

在这里插入图片描述

  • 多选框
    • 当是多个复选框时, 因为可以选中多个, 所以对应的 data 中属性是一个数组
    • 当选择某一个时, 就会将 input 的 value 添加到数组中

在这里插入图片描述

  • v-model : select

    • 单选
      • v-model 绑定是一个值
      • 当我们选中 option 中的一个时, 会将它对应的 value 赋值到 绑定数据中

在这里插入图片描述

  • 多选

    • v-model 绑定的就是一个数组
    • 当选中多个值时, 就会将选中的 option 对应的 value 添加到绑定的数组中
      在这里插入图片描述
  • 值绑定

    • 就是动态的给 value 赋值
      在这里插入图片描述
  • 修饰符

    • v-model.lazy
    • lazy 修饰符
      • 默认情况下, v-model 默认是再 input 事件中同步输入框的数据的
      • 一旦有数据发生改变, 对应的 data 中的数据就会自动发生改变
      • lazy 修饰符 可以让 数据再失去焦点或者回车时才更新
    • number 修饰符
      • 默认情况下, 在输入框中无论输入数字还是字母, 都会被当作自负床来处理
      • 我们希望处理数字类型数据, 那么最好将输入内容当作数字处理
      • number 修饰符可以让在输入框中输入的内容自动转换成数字类型
    • trim 修饰符
      • 如果输入的内容首尾有很多空格, 通常我们希望能够去除
      • trim 修饰符能够过滤左右两边的空格
3 . 计算属性 -> computed
  • 字符串 拼接方式
    • 直接拼接
      • 代码过于冗杂
    <p>{{first}} {{second}} {{three}}</p>
    
    • 通过定义 methods
      • 方法是每次加载时都需要重新运行一次, 对资源消耗过大
    <div>
        <p>{{getFull()}}</p>
    </div>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
    			first: 0,
    			second: 0,
    			three: 0
    		}
    		method:  {
    			getFull: function() {
    			return this.first + '' + this.second + '' + this.three
    		}
    		}
        })
    </script>
    
    • 通过 computed:
      • computed 既达到了代码简化, 也采用了缓存机制, 会将加载的内容进行缓存, 等待下次调用时就可以直接使用, 增加了界面的优化
      • computed 性能更加优化
    <div>
        <p>{{full}}</p>
    </div>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
    			first: 0,
    			second: 0,
    			three: 0
    		}
    		computed:  {
    			full: function() {
    			return this.first + '' + this.second + '' + this.three
    		}
    		}
        })
    </script>
    
  • 什么是计算属性
    • 对数据进行转换后在显示, 或者将多个数据结合起来显示
    • 本质是一个属性, 区别方法
  • computed 完整写法
    • 计算属性的 setter 和 getter
    • 计算属性一般没有 set 方法, 只读属性
<script>
    const app = new Vue({
        el : '#app',     
        computed: {
        	test: {
        		set: function(newValue){
        		//一般不需要实现, 一般只使用get 就好
                    console.log(' log ');
        		},
        		get: function(){
        		return 'test'
        		}
        	}
        }
    })
</script>

简化 - >

  • computed : 的缓存
    • computed 在 Vue 中具有缓存, Vue 会将第一次运行的 computed 结果进行缓存, 等待下一次调用时, 会根据观察 computed 的值是否有变化进行调用, 有变化进进行值的修改, 无变化就直接调用
    • 缓存机制也是 computed 在数据拼接优于 methods 的原因
4 . 高阶函数
  • 编程范式
    • 面向对象编程 (第一公民 : 对象)
    • 函数式编程 (第一公民 : 函数)

在这里插入图片描述

  • reduce()

    • 对数组中所有元素进行汇总
    • preValue 上一次遍历时返回值
    let total = array.reduce(function(preValue, n){
    	return preValue + n
    }, 0)
    
  • filter()

    • filter 函数必须返回一个 boolean 值
    • true : 当返回 true 时, 函数内部会自动将这次的回调的 n 返回到新的数组中
    • false : 如果为false, 函数会自动过滤掉这次数据
  • map()

    • 对数组中所有元素进行遍历
    • 回调函数可对数值进行相应操作
  • 混合使用

let total = array.filter(function (n) {
	return n < 100
}).map(function (n) {
	return n * 2
}).reduce(function(preValue, n) {
	return preValue + n
}, 0)
  • 箭头函数
let total = array.filter(n => n < 100).map(n => n*2).reduce(preValue, n) => preValue + n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

§九千七§

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值