Vue的基本使用

熟悉Vue的相关操作:

变量定义的方式:
1、const定义的变量不可以修改,而且必须初始化
1 const b = 2;//正确
2 // const b;//错误,必须初始化 
3 console.log('函数外const定义b:' + b);//有输出值
4 // b = 5;
5 // console.log('函数外修改const定义b:' + b);//无法输出 

 

2、var定义的变量可以修改,如果不初始化会输出undefined,不会报错。
1 var a = 1;
2 // var a;//不会报错
3 console.log('函数外var定义a:' + a);//可以输出a=1
4 function change(){
5 a = 4;
6 console.log('函数内var定义a:' + a);//可以输出a=4
7 } 
8 change();
9 console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4
3、let是块级作用域,函数内部使用let定义后,对函数外部无影响
1 let c = 3;
2 console.log('函数外let定义c:' + c);//输出c=3
3 function change(){
4 let c = 6;
5 console.log('函数内let定义c:' + c);//输出c=6
6 } 
7 change();
8 console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3
4、Vue对应的操作范围(只支持双标签,单标签内部不能使用插值语句)
使用Vue的时候会由一个EL标签确定EL的命中范围,在这个范围中可以随意使用Vue中定义的data数据

{{ }} 表示插值表达式 EL 理解为是vue的一个挂载点,不能挂载在body和html标签上

对于el:对应的标签选择,可以是id="app",class = "app",默认使用id,以为id可以确定为唯一的。

==Vue中复杂数据的渲染和js的语法相同,使用点(.)语法,数组使用下标索引获取

{{message}}//不可以命中EL中的message
<div id = "app" class = "app">
    {{message}}//可以命中EL中的message
    <span>
        {{message}}//可以命中EL中的message
        </span>
    </div>

<srcipt>
      var app = new Vue({
          //el:"#app",//这里的el表达式对应css中的标签选择器,与id对应
          //el:".app",//与class对应
          el:"div",//直接对应div这个标签
          data:{
              message : "hello Vue!"
          }
      })  
        </srcipt>
5、Vue的常规应用(页面根据数据的改变而改变)
  1. 内容绑定,事件绑定(v-text,v-html,v-on)

    v-text:设置标签的文本值(v-text = "message"),替换模板中所有的数据,如果拼接需要在单引{{message+“hello”}},拼接加引号

    v-html:可以解析HTML结构

    <a href='www.baidu.com’>百度</a>

    上面在Vue的data中定义字段值,v-text会直接返回所有内容,而v-html直接解析为一个百度链接

    v-on:为元素绑定事件,v-on:可以被替换为@符号,效果相同方法绑定在Vue的methods属性中,方法内部通过this关键字可以访问定义在data中的数据。

 

 

    @keyup绑定键盘敲击事件(点击固定值触发点击事件),@keyup.enter 绑定enter键的触发事件

    (@keyup.enter="sayHi"):enter键触发sayHi方法。

  1. 显示切换,属性绑定(v-show,v-if,v-bind)

    v-show:指令的作用是:根据真假切换元素的显示状态v-show不支持<template>元素,也不支持v-else

    原理是修改原始的display,实现显示隐藏,指令后面的内容,最终都会解析为Boolean(布尔值),值为true元素显示,值为false元素隐藏

    数据改变之后,对应元素的显示状态会同步

    v-if指令的作用是:根据表达式的真假切换元素的显示状态(实际操作就是创建和删除dom节点)

    本质是通过操纵dom元素来切换显示状态,表达式的值为true,元素存在于dom树中,为false,从dom树中移除(在实际操作中,如果操作显示状态比较频繁,选择使用v-show)

    (在v-if之后也可以添加v-else,可以完成一个选择的操作,v-else-if,顾名思义,充当 v-if 的“else-if 块”,可以连续使用)

    v-bind(设置元素的属性(比如:src,title,class)v-bind:属性名=表达式)简写就直接省略v-bind,写成(:属性名)

    //:title 会显示图片的标题 //:src ="imgSrc"绑定图片的路径(v-bind:src="imgSrc") <img v-bind:src="imgSrc" v-if="num>4" :class="{active:isActive}" @click="exchangeActive()"/>

  1. 列表循环,表单元素绑定(v-for,v-on,v-model)

    v-for指令的作用:根据数据生成列表结构

    数组经常和v-for结合使用,语法是( item,index ) in 数据(v-for=”(item,index)in data“)

    也可以使用of代替in(<div v-for="item of items"></div>

//name表示列表集合中键值对的键,value表示值
<div v-for="(value, name) in object">   {{ name }}: {{ value }} </div>
//index表示该键值对在列表中的索引
<div v-for="(value, name, index) in object">
  {{ index }}. {{ name }}: {{ value }}
</div>

item和index可以结合其他指令一起使用,数组长度的更新会同步到页面上,是响应式的

列表的添加和删除:

增加;list.push()--加在列表的尾部

删除:list.pop(),从列表的尾部删除;list.shift():shift从列表的头部删除。list.splice(index):删除列表索引所在的元素

统计数组的长度:{{list.length}}

  • push():元素从尾部加入列表

  • pop():元素从列表的尾部删除

  • shift():从列表的头部删除

  • unshift('text'):与从头部删除相反,这个是从头部加,需要添加要增加的数

  • splice():对列表进行分块(可进行删除,插入,替换操作),参数是字符串,表示按照分块的规则,如果参数splice(2,3):表示从索引为2的值开始,切除3个作为分片并返回一个新数组。原数组也会改变。splice(2,0,'a','b'):表示从第二个数开始,切除0个,并添加a和b,同样在原数组上增加,由于切除的分片为0,所以返回的分片为空(该操作可以理解为添加操作);splice(2,2,'a','b'):表示切除从2为索引开始的2个值,并将a和b加在后面。该操作可以理解为替换。

  • sort():对列表进行排序

  • reverse():对列表进行反转

  • concat():合并,拼接,操作和push类似,都是在数组的末尾添加一个或多个值,但是push是在原数组上添加,而concat是复制一个原来的数组的副本,然后再将这个新的数组赋值给一个新的变量,原数组不会改变。

  • slice():剪切,切片的方法,可以对数组进行切片,参数slice(2,8):留下数组中2到8位置的数,slice(2):删除所有是数,留下2之后的所有数。参数可以为负slice(-2):表示删除最后两个数,其他的留下

  • filter():过滤属性:可以对数组中的数进行过滤,并且不会改变原有数组。

computed:{
  evenNumbers: function () {
    return this.numbers.filter(function (number) 
    {
      return number<4
    })
  }
}
  • 替换数组

4、v-model指令的作用是便捷的设置和获取表单元素的值

绑定的数据会和表单元素值相关联,绑定的数据<-------->表单元素的值,双向绑定

.watch侦听器(监听器)watch 选项允许我们执行异步操作 (访问一个 API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。

watch中的三种属性:handler,immdiate,deep;watch默认绑定,页面首次加载时,是不会执行的。只有值发生改变才会执行。

handle是执行代码的区域

immediate:truetrue就表示会立即执行,反之就是在页面有变化之后再执行

deep:true表示深度监听,当所监听的值发生变化的时候能够监听到,反之不能监听

<template>
  <div>
    <div>
      <input type="text" v-model="ipt.text" />
      <p>
        姓名
        <b>{{name}}</b>
      </p>
      <p>
        性别
        <b>{{gender}}</b>
      </p>
      <p>
        年龄
        <b>{{age}}</b>
      </p>
      <p>
        身高
        <b>{{height}}</b>
      </p>
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      name: "小明",
      gender: "",
      age: "26",
      height: "180",
      ipt: {
        text:'小明'
      }
    };
  },
  watch: {
    // 通过输入框文字的变化,来改变下面的数据
    ipt: {
      handler(newVal,oldVal) {
        console.log(111)
        if (newVal.text == "小红") {
          this.name = "小红";
          this.gender = "";
          this.age = 18;
          this.height = 160;
        } else {
          this.name = "";
          this.gender = "";
          this.age = "";
          this.height = "";
        }
      },
      immediate:false,
      deep:false
    }
  },
  methods: {}
};
</script>
  1. 为什么在大型项目中data需要使用return返回数据呢?答:不使用return包裹的数据会在项目的全局可见,会造成变量污染;使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件。

  2. created、mounted,computed函数的使用

    created:(钩子函数)在模板渲染成HTML前调用,即通常初始化某些属性值,然后再渲染成视图

    mounted:(钩子函数)在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。如果在mounted钩子函数中请求数据可能导致页面闪屏问题。其实就是加载时机问题,放在created里会比mounted触发早一点,如果在页面挂载完之前请求完成的话就不会看到闪屏了

    computed:{}计算属性,什么是计算属性呢,我个人理解解释对数据进行一些操作,可以包含逻辑处理操作,对计算属性中的数据进行监控,计算属性是基于它的以来进行更新的,只有在相关依赖发生改变时才能更新变化,以函数的形式返回结果。计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。和方法相比,方法只要触发重新渲染,调用方法将总会再次执行函数。对computed中方法的调用只需要函数的名字,不需要括号。存储方式为内存存储;

7.vue.component可以自定义一个新的组件:组件可以相互交流,可以定义公共组件,私有组件,也有父组件和子组件相关的说法

 

 

 

注意:在组件中的data需要写成函数形式,data(){return}或者data:function(){return }

props接受父组件传进来的属性

8.Truthy真值truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。所有值都是真值,除非它们被定义为 假值(即除 false0""nullundefinedNaN 以外皆为真值)

真值代码:

if (true)
if ({})
if ([])
if (42)    
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)

9.axios:请求数据库

【使用过的请求地址:

天气:http://wthrcdn.etouch.cn/weather_mini?city='+that.city(get请求,city参数)

音乐:https://autumnfish.cn/search(get请求,keywords查询的关键字)

获取音乐地址:https://autumnfish.cn/song/url (get请求,id歌曲的id)

歌曲详情获取:https://autumnfish.cn/song/detail(get请求,ids请求参数)

axios必须先导入才可以使用 使用get或post方法即可发送对应的请求 then方法中的回调函数会在请求成功或失败时触发

通过回调函数的形参可以获取响应内容,或错误信息

https://github.com/axios/axios 文档axios

 

  axios回调函数中的this已经改变,无法访问到data中数据 把this保存起来,回调函数中直接使用保存的this即可 和本地应用的最大区别就是改变了数据来源

10.启动一个vue项目

 

 

11.事件修饰符

  • .stop

  • .prevent

  • .capture

  • .self

  • .once

  • .passive

<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>

<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>

<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>

<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>

<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>

<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>
<!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
<!-- 而不会等待 `onScroll` 完成  -->
<!-- 这其中包含 `event.preventDefault()` 的情况 -->
<div v-on:scroll.passive="onScroll">...</div>

 

posted @ 2021-12-16 10:09  代码红了一大片  阅读(297)  评论(0编辑  收藏  举报