VUE

vue

一、Vue.js开发基础

1.简介

Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。

2.核心功能

声明式渲染:Vue 基于标准 HTML 拓展了一套模板语法,使得我们可以声明式地描述最终输出的 HTML 和 JavaScript 状态之间的关系。
响应性:Vue 会自动跟踪 JavaScript 状态并在其发生变化时响应式地更新 DOM。

3.基本使用

el:挂载;
data:模型数据;
msg:数据。

    <div id="app">
        <!-- {{ }} 输出变量的值-->
        <p>{{ msg }}</p>
    </div>
    <div class="add">
        <p>{{ msg}}</p>
    </div>
    <!-- 导入vue.js -->
    <script src="./vue.js"></script>
    <script>
        // 实例化一个Vue
        new Vue ({
            el:"#app",
            data:{
                msg:"鸡杀马"
            }
        })
    </script>
4.{{}}文本插值

解析标签体内容。

    <div class="app">
        <p>{{ age }}</p>
        <p>{{ age + 10}}</p>
        <p>{{age >= 18}}</p>
        <p>{{ age >= 12 }}</p>
        <p>{{ age >=18 ? '成年' : '未成年'}}</p>
        <!-- <p>{{ if(age >= 18) "成年"}}</p> -->
    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el:'.app',
            data:{
                age:16
            }
        })
    </script>
5. v-text&v-html指令
    <div id="app">
        <div v-text="msg"></div>
        <div v-html="msg"></div>
        <div>hello,{{ msg }}.</div>
    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                msg:'你好'
            }
        })
    </script>
6.v-model指令

在表单 input、textarea以及select元素上创建双向数据绑定

   <div id="app">
        <button @click="msg = '你好'">修改msg的值</button>
        <!-- 输入框 -->
        <!-- v-model获得输入的内容 -->
        <input type="text" v-model="msg">
        <p>{{ msg }}</p>
        <!-- 下拉框 -->
        <!-- v-model获得选中的value值 -->
        <select v-model="fruit">
            <option value="apple">苹果</option>
            <option value="orange">橘子</option>
            <option value="banana">香蕉</option>
        </select>
        <!-- 复选框:只有选中和未选中两种状态 -->
        <!-- v-model得到truefalse -->
        <input type="checkbox" v-model="chk">
    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                msg:'',
                fruit:'',
                chk:true
            }
        })
    </script>
7.v-on指令和methods方法属性
    <div id="app">
        <!-- 当点击这个按钮,就调用fn1函数 -->
        <button v-on:click="fn1">点我啊</button>
        <!-- 当双击这个按钮,就调用fn1函数 -->
        <button v-on:dblclick="fn1">双击666</button>
        <!-- 当移入这个按钮,就调用fn2函数 -->
        <button v-on:mouseenter="fn2">移入我</button>
        <!-- 简写形式:把v-on:改成@就是简写形式 -->
        <h4>以下是简写形式</h4>
        <hr>
        <!-- 当点击这个按钮,就调用fn1函数 -->
        <button @click="fn1">点我啊</button>
        <!-- 当双击这个按钮,就调用fn1函数 -->
        <button @dblclick="fn1">双击666</button>
        <!-- 当移入这个按钮,就调用fn2函数 -->
        <button @mouseenter="fn2">移入我</button>
    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            //Vue中放方法的地方
            methods:{
                fn1(){
                    alert('点我干哈?')
                },
                fn2(){
                    alert('你想干哈?')
                }
            }
        })
    </script>
8.v-bind指令

绑定数据和元素属性。

    <div id="app">
        <a href="http://www.baidu.com">跳转</a>
        <a v-bind:href="url">跳转</a>
        <button @click="change" target="_blank">跳转</button>
    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                url:'http://mi.com'
            },
            methods:{
                change(){
                    this.url = 'http://taobao.com'
                }
            }
        })
    </script>
9.生命周期

vue实例从创建到销毁的过程。

   <div id="example">{{message}}</div>
   <script src="./vue.js"></script>
   <script>
        new Vue({
            el: '#example', //挂载
            data: {
                message: 'match'
            },
            beforeCreate() {
                console.log('beforeCreate');
            },
            created() {
                console.log('created');
            },
            beforeMount() {
                console.log('beforeMount');
            },
            mounted() {
                console.log('mounted');
            },
            beforeUpdate() {
                console.log('beforeUpdate');
            },
            updated() {
                console.log('updated');
                //组件更新后调用$destroyed函数,进行销毁 
                this.$destroy();
            },
            beforeDestroy() {
                console.log('beforeDestroy');
            },
            destroyed() {
                console.log('destroyed');
            },
        })
    </script>

二.结构渲染

1. 条件渲染 v-if & v-show指令

(1)v-if与v-show区别

【v-show】
1.本质就是标签display设置为none,控制隐藏。只是基于CSS进行切换。
2.v-show有更高的初始渲染消耗。
3.v-show适合频繁切换的情况。
【v-if】
1.动态的向DOM树内添加或者删除DOM元素。
2.v-if有更高的切换消耗。
3.v-if适合运行条件很少改变的情况。

   <!-- v-show和v-if都可以用来控制标签的显示与隐藏
        <标签 v-show='布尔值'></标签>
        <标签 v-if='布尔值'></标签>
        当布尔值为true,他们就显示;当布尔值为false,他们就隐藏.
     -->
    <div id="app">
        <div v-show="isShow">我是由v-show控制的</div>
        <div v-if="isShow">我是由v-if控制的</div>
    </div>
    <script src="../../../vue.js"></script>
    <script>
        new Vue ({
            el:'#app',
            data:{
                isShow:none
            }
        })
    </script>

(2)v-if指令

    <!-- 多分支使用v-if -->
    <div id="app">
        <h3>根据班长有多少钱,决定今天中午吃什么:</h3>
        <div v-if="money >=10000">请全班同学吃{{ dinner }}</div>
        <div v-else-if="money >=5000">请全班同学吃季季红火锅</div>
        <div v-else-if="money >=1000">请全班同学嗦南昌拌粉</div>
        <div v-else-if="money >=100">请全班同学喝AD钙奶</div>
        <div v-else>暴打班长一顿,叫他回去取钱。</div>
    <hr>
    <!-- 双分支使用v-if -->
    <div v-if="age >=18">成年了,去网吧偷耳机。</div>
    <div v-else>未成年,去公园捡垃圾。</div>
    </div>
    <script src="../../../vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                money:10000,
                age:14
            }
        })
    </script>

(3)v-show指令

    <!-- 多分支使用v-show -->
    <div id="app">
        <h3>根据班长有多少钱,决定今天中午吃什么:</h3>
        <div v-show="money >=10000">请全班同学吃豪华海鲜自助</div>
        <div v-show="money >=5000">请全班同学吃季季红火锅</div>
        <div v-show="money >=1000">请全班同学嗦南昌拌粉</div>
        <div v-show="money >=100">请全班同学喝AD钙奶</div>
        <div v-show="money < 100">暴打班长一顿,叫他回去取钱。</div>
    <hr>
    <!-- 双分支使用v-show -->
    <div v-show="age >=18">成年了,去网吧偷耳机。</div>
    <div v-show="age < 18">未成年,去公园捡垃圾。</div>
    </div>
    <script src="../../../vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                money:3000,
                age:14
            }
        })
    </script>
2. 列表渲染 v-for

(1)v-for遍历数组

<!-- 
        【v-for】
        语法:<标签 v-for='item in 数组'></标签>
        作业:自动实现数组有多少个元素,就会产生多少这样的标签。
    -->

    <div id="app">
        <button @click="add">在最后添加一个</button>
        <ul>
            <!-- 第一个参数是元素,第二个参数是下标。与名字无关。 -->
            <li v-for="(item,index) in list">{{ item }}---{{ index }}</li>
        </ul>
    </div>
    <script src="../../vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                list:['刘备','关羽','张飞','赵云','黄忠']
            },
            methods:{
                add(){
                    this.list.push('马超')
                }
            }
        })
    </script>

(2)v-for遍历对象

<!-- v-for可以遍历对象
    语法:<标签 v-for="(val,key) in 对象"></标签> 
          <标签 v-for="val in 对象"></标签> -->
          
    <div id="app">
        <ul>
            <!-- 对象有多少个属性就会产生多少个这样的标签。 -->
            <li v-for="item in obj">{{ item }}</li>
            <!-- 第一个参数是属性值,第二个参数是属性名。 -->
            <!-- 跟名字无关,也可以简写只拿属性值。 -->
            <li v-for="(val,key) in obj">{{ key }}---{{ val }}</li>
        </ul>
    </div>
    <script src="../../vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                obj:{
                    name:'jack',
                    age:16,
                    sex:'男'
                }
            }
        })
    </script>

(3)v-for遍历数字

<div id="app">
        <!-- 遍历数字(指定次数的循环) -->
        <h2>以下是指定次数</h2>
        <ul>
            <!-- num是19 -->
            <li v-for="num in 6">{{ num }}</li>
        </ul>
    </div>
    <script src="../../vue.js"></script>
    <script>
        new Vue({
            el: '#app'
        })
    </script>

(4)v-for中的key

<div id="app">
        <button @click="list.splice(1,0,{id:4,name:'赵六'})">添加</button>
        <ul>
            <li v-for="item in list" :key="item.id">
                <input type="checkbox">
                <span>{{ item.name }}</span>
            </li>
        </ul>
    </div>
    <!-- 
        现象:当我勾了李四,然后在下标1的位置添加了赵六,结果发现勾给了赵六,李四自己没勾了。
        原因:v-for会尝试最大限度的复用当前元素,导致状态绑定错乱。
        解决:在v-for后加上一个key属性,key绑定这个数据的唯一值(一般是id,不能是字符串和数字类型)-->
    <script src="../../vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                list:[
                    {id:1,name:'张三'},
                    {id:2,name:'李四'},
                    {id:3,name:'王五'},
                ]
            }
        })
    </script>

三.计算属性,侦听器和数据存储侦听器

1.计算属性 computed
<div id="app">
        <span>hello,{{fullName}}<span>
        <!--fullName是个计算属性-->    
    <div>  
    <script src="../../vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                firstName: '熊',
                lastName: '大'
            },
            computed:{
                //这个函数就是getter
                fullName:function(){
                    return this.firstName +'-'+  this.lastName
                }
            }
        })
    </script>
2.侦听器 watch
<!-- 对对象进行侦听 -->
    <div id="app">
        <p>{{ obj.name }} --- {{ obj.age }}  --- {{ obj.height }}</p>
        <button @click = "obj.name = 'rose'">修改obj的name属性</button>
        <button @click = "obj.age = 30">修改obj的age属性</button>
        <button @click = "obj = {name:'andy', age:99} ">修改obj的指向</button>
    </div>
    <script src="../../vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                obj:{
                    name:'jack',
                    age:16,
                    height:175
                }
            },
            watch:{
                obj:{
                    // 当有变化会调用的函数
                    handler(){
                        console.log('obj的属性变化了');
                    },
                    // 开启深度侦听
                    deep:true,
                    // 要不要当前页面一打开就立即调用handler函数。
                    // 给true表示立即调用,默认是flase。(代表只有改动了才调用)
                    immediate:true
               }
            }
        })
    </script>
3.数据存储

(1).cookie

 <!-- 【cookie】    
    一:使用场景:
     1:记住密码,下次自动登录。
     2:记录用户浏览数据,进行商品(广告)推荐。
    二:特点:
     1:cookie保存在浏览器端。
     2:单个cookie保存的数据不能超过4KB。
     3:cookie中的数据是以域名的形式进行区分的。
     4:cookie中的数据是有过期时间的,超过时间数据会被浏览器自动删除。
     5:cookie中的数据会随着请求被自动发送到服务器端。
     
    三:
    由于cookie存储机制有很多缺点,HTML5不再使用它,转而使用改良后的WebStorage存储机制。
    (localStorage和sessionStorage)

(2).localStorage

// 1.什么是localStorage
        //   在HTML5中,新加入了一个localStorage特性,这个特性主要用来作为本地存储来使用。
        //   它解决了cookie存储空间不足的问题,每条cookie的存储空间为4K,localStorage一般为5M。

        // 2.localStorage的生命周期
        //   LocalStorage生命周期是永久,这意味着除非用户在显示在浏览器提供的UI上清除localStorage信息,
        //   否则这些信息将永久存在。

        // 3.localStorage的局限
        // a.在IE8以上的IE版本才支持localStorage这个属性。
        // b.目前所有的浏览器中都会被localStorage的值类型限定为string类型,
        //   对我们日常比较常见的JSON对象类型需要一个转换。
    
        // 4.判断浏览器是否支持localStorage这个属性
        if(window.localStorage){
            alert('浏览器支持localStorage')
        }

        // 5.localStorage的写入
        if(!window.localStorage){
            alert('浏览器不支持localStorage')
        }else{
            var storage = window.localStorage;
            // 写入a字段
            storage['a'] = 1;
            // 写入b字段
            storage.b = 2;
            // 写入c字段
            storage.setItem('c',3)

            console.log(typeof storage['a']); //string
            console.log(typeof storage['b']); //string
            console.log(typeof storage['c']); //string
        }

(3).sessionStorage

 // SessionStorage的生命周期
 		 //   SessionStorage生命周期为当前窗口或标签页。
         //   一旦窗口或标签页被永久关闭了,那么所有通过Session存储的数据也就被清空了。

四.JSON转换

1.JSON字符串
// JSON和JS对象的关系
        // JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串。

        // 这个一个对象
        var obj = {a:"hello", b:"world"};
        console.log(typeof(obj)); //object
        var obj1 = JSON.stringify({a:"hello", b:"world"})
        console.log(obj1);

        // 这个一个JSON字符串,本质是一个字符串
        var json = '{"a":"hello", "b":"world"}';
        console.log(typeof(json)); //string
        JSON.parse('{"a":"hello", "b":"world"}')
2.JSON和JS对象互换
 // 【JSON和JS对象互转】

        // JSON.parse()方法 实现从JSON字符串转换为JS对象
        var obj = JSON.parse('{"a":"hello", "b":"world"}')
        console.log(obj); //object

        // JSON.stringify()方法 实现从JS对象转换为JSON字符串
        var json = JSON.stringify({a:"hello", b:"world"})
        console.log(json);

五.事件处理

1.事件与事件流

事件:

JavaScript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性。
常见的有加载事件、鼠标事件。

事件流:

由于DOM是一个树结构,如果在父子节点绑定事件时候,当触发子节点的时候,就存在一个顺序问题,这就涉及到了事件流
页面触发一个事件时,会按照一定的顺序来响应事件,事件的响应过程为事件流。

2.事件三件流:

事件捕捉阶段(capture phrase):事件开始由顶层对象触发,然后逐级向下传播,直到目标元素;(从上到下)

处于目标阶段(target phrase):处于绑定事件的元素上;

事件冒泡阶段(bubbling phrase):事件由具体的元素先接收,然后逐级向上传播,直到不具体的元素。(从下到上)

3.事件方法

@click:当单击元素时,发生click事件。

@dbclick:当双击元素时,发生dbclick事件。

@focus:当元素获得焦点时,发生focus事件。

@blur:当元素失去焦点时发生blur事件。

@submit:当提交表单时,发生submit事件。

@keydown:当键盘被按下时,发生keydown事件。

@keyup:当键盘被松开,发生keyups事件。

@mouse enter: 当鼠标指针穿过(进入)被选元素时,会发生mousedown事件。

@mouse down:当鼠标指针移动到元素上方,并按下鼠标左键,会发生mousedown事件。

@mouse leave: 当鼠标离开被选元素时,会发生mouseleave事件。

@mouse move:当鼠标指针在指定的元素中移动时,会发生 mousemove 事件。

@mouse out:在鼠标指针离开被选元素或任意子元素时都会被触发。

@mouse over:当鼠标指针位于元素上方时,会发生 mouseover 事件。

@mouse up:当鼠标指针移动到元素上方,并松开鼠标左键时,会发生 mouseup 事件。

六.AJAX

Ajax就是让浏览器跟服务器交互的一套API。

它的作用就是让浏览器和服务器进行交互。

是向服务器请求数据的局部刷新页面的技术。

ajax发送post请求

1.创建对象,实例化一个ajax对象

2.调用open方法,设置请求方式和地址

3.设置请求头

<script>
        //1.创建请求对象,实例化一个ajax对象
        let xhr = new XMLHttpRequest();
        //2.调用open方法,设置请求
        xhr.open('post', 'https://autumnfish.cn/api/user/register')
        //3.设置请求头
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
        //4.设置请求成功后的回调函数
        xhr.onload = function () {
            console.log(xhr.response);
        }
        //5.使用send()方法去发送ajax请求
        xhr.send('username=王紫妮11111')
    </script>

ajax发送get请求
 <input type="button" value="点我看笑话" class="getJoke">
    <div class="joke-container"></div>
    <script>
        document.querySelector('.getJoke').onclick = function () {
            //1.创建一个请求对象
            let xhr = new XMLHttpRequest()
            //2.调用xhr的open方法,开启请求
            //传入请求方式和请求地址
            xhr.open('get', 'https://autumnfish.cn/api/joke')
            //3.设置请求成功后的回调函数
            xhr.onload = function () {
                //把响应的内容打印到控制台里
                // console.log(xhr.response);
 
                //把响应的内容显示在div区域
                document.querySelector('.joke-container').innerHTML = xhr.response
            }
            //调用send方法
            xhr.send()
        }
    </script>

get请求提交参数
 <script>
        //AJAX发送get请求,通过url地址拼接传递参数
        //url地址? key=value
        //url地址? key1=value1&key2=value2
 
        // 1.创建请求对象
        let xhr = new XHLHttpRequest()
        // 2.调用open,设置请求方式和请求地址
        xhr.open('get','https://autumnfish.cn/api/joke/list?num=5')
        // 3.设置请求成功后的回调函数
        xhr.onload = function(){
            console.log(xhr.response);
        }
        // 4.发送请求
        xhr.send()
    </script>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值