Vue学习1:基础知识(简介、指令语法、补充知识)

Vue学习1:基础知识(简介、指令语法、补充知识)

一、Vue简介

vue全家桶:core+vue-router+vuex
vue特点:
1.解耦视图和数据
2.可复用的组件
3.前端路由技术
4.状态管理
5.虚拟DOM

vue安装方式:
在这里插入图片描述
原生js编程范式:命令式编程
vue:声明式编程

vue的MVVM:
在这里插入图片描述
在这里插入图片描述
vue传入的option:
在这里插入图片描述
vue生命周期:
在这里插入图片描述
生命周期解释:Vue实例中生命周期created和mounted的区别(具体细节分析)。

二、Vue语法

1. 简单指令

mustache:{{}},里面可以跟变量和表达式,响应式改变
v-once:{{}}不能改变内容
<p v-once>{{message}}</p>
v-html:设置元素的innerHTML,可以解析html结构
<p v-html="message"></p>
v-text:设置标签内容,会替换全部内容,支持表达式,只能解析文本
<p v-text="message"></p>
v-pre:原封不动显示,不做解析,显示{{message}}
<p v-pre>{{message}}</p>
v-cloak:在vue解析之前 p标签中包含了v-cloak属性,解析完成之后就没有这个属性(少用)
<p v-cloak>{{message}}</p>

2. v-bind 动态绑定属性

缩写(:属性)
在这里插入图片描述
常用:class="{类名1:boolean,类名2:boolean}"
:style="{属性名1:变量(字符串),属性名2:变量(字符串)}"
在这里插入图片描述

3. 计算属性computed

在这里插入图片描述

    computed: {
      //常用写法 实际上只是get(一个属性)
      // fullname: function() {
      //   return this.firstname + ' ' + this.lastname;
      // }

      //真正的规范写法 但是一般不写set方法 只读属性
      fullname: {
        set: function(newValue) {
		  const names = newValue.split(' ');
          this.firstname = names[0];
          this.lastname = names[1];
        },
        get: function() {
          return this.firstname + ' ' + this.lastname;
        }
      }

computed计算属性的好处:多次调用get属性,里面的函数只调用一次,之后调用会直接使用缓存,只有在更新了之后,才会重新调用函数,选择使用computed而不是mustache或者method能对性能有较大改善。

4. 事件监听 v-on

v-on基本使用

  <button v-on:click="increment">+</button>
  <!--  语法糖-->
  <button @click="increment">+</button>

添加参数
注意参数要传入基本数据类型,例如字符串要加单引号 不然会被当做变量
在这里插入图片描述
v-on修饰符
在这里插入图片描述

<div id="app">
  <!-- 1.阻止事件冒泡 .stop-->
  <div @click="divclick">
    <button @click.stop="btnclick">按钮</button>
  </div>

  <!--  2.prevent 阻止默认事件-->
  <form action="baidu">
    <input type="submit" value="提交" @click.prevent="submitClick">
  </form>

  <!--  3.监听某个键盘事件  enter回车按钮-->
  <input type="text" @keyup.enter="keyup">

  <!--  4.once 只触发一次回调-->
  <button @click.once="onceclick">只响应一次</button>
</div>

5. 条件判断v-if、v-else、v-else-if

在这里插入图片描述
小问题:
存在虚拟dom的机制,在数据改变时,会复用已经存在的元素(用户输入内容也保存下来了),并修改变化的部分,再显示出来
不想复用的话,可以使用key属性,当key值不同时,不会复用(其实也就是更好的复用)
在这里插入图片描述

6. 显示v-show

注意v-show和v-if的区别:

<!--  v-if:当条件为false时,该dom元素不存在-->
  <h2 v-if="isShowed" id="aaa">{{message}}</h2>
<!--  v-show:当条件为false时,添加行内样式display:none,实际存在于dom树中-->
  <h2 v-show="isShowed" id="bbb">{{message}}</h2>

选择:当显示与隐藏切换很频繁时,使用v-show,当只有一次切换时,使用v-if

7. 遍历数据v-for

在这里插入图片描述
遍历数组和对象

<!--    遍历数组-->
    <li v-for="item in names">{{item}}</li>
    <li v-for="(item, index) in names">{{index+1}}.{{item}}</li>
  </ul>
  <ul>
<!--    遍历对象-->
    <li v-for="item in person">{{item}}</li>
    <li v-for="(value, key, index) in person">{{key}}.{{value}}.{{index}}</li>
  </ul>

使用v-for是添加key属性:更好的复用
当有key时,先匹配对应的对应的key值,在创建新的并插入
因此key的值要一一对应,譬如:<li v-for="item in letter" :key="item">{{item}}</li>(没有重复元素的前提下,这是一一对应的)
在这里插入图片描述
数组中的响应式方法:
因为Vue是响应式的,所以当数据变化时,Vue会自动检测数据变化,视图会发生对应的更新
push()pop()shift()unshift()splice()sort()reverse()

删除元素/插入元素/替换元素:
删除:splice(开始的位置, 删除的个数) splice(开始的位置) 后面的全部删除
替换:splice(开始的位置, 删除的个数, 追加元素1, 追加元素2...) Vue.set(要修改的对象, 索引值, 修改的值)
插入:splice(开始的位置, 0, 追加元素1, 追加元素2)

注意 通过索引值来修改数据,不是响应式的

8. 表单绑定v-model

基本使用:
mustache语法/v-bind是单向的,就是数据发生变化,会显示在页面上,但是反过来不行
v-model是双向绑定的,数据和UI对应变化,应用于input 和 textarea
<input type="text" v-model="message"> 相当于 <input tyoe="text" :value="message" @input="message=$event.target.value">
v-model其实是一个语法糖,包含两个操作:v-bind绑定一个value属性;v-on指令给当前元素绑定input事件

v-model:radio
数据中的sex和value绑定了,此时,可以不用添加name="sex"也可以实现互斥选择

    <div id="app">
        <label for="male">
            <input type="radio" id="male" name="sex" value="" v-model="sex"></label>
        <label for="female">
            <input type="radio" id="female" name="sex" value="" v-model="sex"></label>
        <h2>{{sex}}</h2>
    </div>

v-model:checkbox
把选中的和hobbies联系起来

    <div id="app">
        <input type="checkbox" id="agree" value="篮球" v-model="hobbies">篮球
        <input type="checkbox" id="agree" value="足球" v-model="hobbies">足球
        <input type="checkbox" id="agree" value="羽毛球" v-model="hobbies">羽毛球
        <input type="checkbox" id="agree" value="游泳" v-model="hobbies">游泳
        <h2>{{hobbies}}</h2>
    </div>

v-model:select
在这里插入图片描述
mySelect:"", mySelects:[]

值绑定:
通过v-bind动态绑定value的值(originHobbies可能是网络获取的数据)

<label v-for="item in originHobbies" :for="item">
	<input type="checkbox" :value="item" :id="item" v-model="hobbies">{{item}} 
</label>

修饰符:
v-model.lazy:不及时双向绑定,而是当失去焦点或者回车时才更新数据
v-model.number:输入框获得的都是字符串类型,使用此修饰符可以转成数字类型,方便后续处理
v-model.trim:过滤内容两边的空格
在这里插入图片描述

三、其他补充知识

1. ES6对象增强写法

在这里插入图片描述
angular:google 实际是用typescript
typescript:Microsoft 增加了类型检测
flow:Facebook
react:Facebook 用JavaScript

2. js高阶函数filter/map/reduce

命令式编程:一步一步给指令执行
声明式编程:先把数据定义好,然后直接拿来使用, vue/react

面向对象编程:第一公民是对象
函数式编程:第一公民是函数

filter
语法:var newArray = arr.filter(callback(element[, index[, array]])[, thisArg])
回调函数返回一个布尔值,若为true,则加入新数组中,false则过滤掉

//返回小于100的值
let newNums = nums.filter(function(n) {
	return n < 100;
})

map
语法:
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
// Return element for new_array
}[, thisArg])
一个由原数组每个元素执行回调函数的结果组成的新数组

//返回两倍
let newNum = nums.map(function(n){
	return n * 2;
})

reduce
语法:arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
Accumulator (acc) (累计器)
Current Value (cur) (当前值)
Current Index (idx) (当前索引)
Source Array (src) (源数组)

作用:对数组中所有内容进行汇总

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
  return accumulator + currentValue;
}); //10
[0, 1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => {
    return accumulator + currentValue
}, 10) //20

三者综合起来写:

let total = nums.filter(n => n < 100).map(n => n * 2).reduce((prev, curr) => prev + curr);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值