01-vue入门

学习Vue最好的方式:查看官网文档  Vue.js - 渐进式 JavaScript 框架 | Vue.js

1.1-Vue介绍

  • (1)Vue是什么?

    • js框架

  • (2)Vue干什么用的?

    • 构建用户页面(数据渲染到页面)

  • (3)有什么特点?

    • 渐进式

1.2-Vue两个重要特点

1-数据驱动

1.数据驱动 :Vue会根据数据,自动渲染页面

  • 无需DOM操作,修改了对象中的数据,页面会自动渲染

  • Vue的底层使用了一种叫做虚拟DOM的技术,能够实时监听js对象的属性变化从而自动更新页面DOM元素

    • 虚拟DOM本质是一个js对象

2-组件化开发(盒子复用)

2.组件化开发 : 网页中的某一个部分,可能需要在多个地方被重复使用,就可以定义成一个组件

      组件化开发好处:   a. 一次定义,多处使用   便于开发维护

类似于我们之前的函数封装解决代码冗余问题。Vue.js可以把网页的某一个部分(HTML+CSS+JS)封装成一个组件

1.3-Vue基本使用

  • 官方文档传送门:Vue官方文档

  • 第三方框架通用的使用步骤

    • 1.导包

    • 2.写HTML结构

    • 3.js中初始化配置

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 1.导包 -->
    <script src="./vue.js"></script>
</head>

<body>
    <!-- 2.HTML结构 -->
    <div id="app">
        {{ message }}
        <br>
        {{ name }}
        <br>
        {{ age }}
        <br>
        {{ sex }}
    </div>

    <script>
        /* 3.初始化配置 */
        /* 
        (1)Vue是导入vue.js之后得到的一个全局构造函数
        (2)调用Vue构造函数 创建一个vue实例对象
        */
        let app = new Vue({
            //el: element 用来设置vue实例的挂载点(将数据渲染到哪个元素身上)
            el: '#app',
            //data: 要渲染的数据
            /* 数据驱动:vue会根据data中的数据,自动渲染页面(无需DOM操作) */
            data: {
                message: 'Hello Vue!',
                name:'小白',
                age:22,
                sex:'女'
            }
        })
    </script>
</body>

</html>

1.4-Vue的挂载点介绍

  • el挂载点官方文档传送门:https://cn.vuejs.org/v2/api/#el

  • 1.挂载点el作用 : 告诉vue实例,你要将data中的数据渲染到哪一个视图

  • 2.注意点

    • (1)挂载点可以使用 id选择器(vue推荐使用) 类选择器 标签选择器

      • 开发中基本上都是id选择器,保证HTML标签唯一性

      • 如果你希望data中的数据能够对多个元素生效,可以将vue实例挂载到父元素中

    • (2)如果选择器选中了多个元素,只会选择第一个元素

    • (3)挂载点不能设置为html和body标签 (程序报错)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 1.导包 -->
    <script src="./vue.js"></script>
</head>

<body>
    <!-- 2.HTML结构 -->
    <div id="xb">
        <div id="app">
            {{ message }}
        </div>

        <hr>
        <div id="box" class="container">
            {{ message }}
        </div>

        <hr>
        <div class="container">
            {{ message }}
        </div>
    </div>

    <script>
        /* 3.初始化配置 */
        /* 
        (1)Vue是导入vue.js之后得到的一个全局构造函数
        (2)调用Vue构造函数 创建一个vue实例对象
        */
        let app = new Vue({
            //el: element 用来设置vue实例的挂载点(将数据渲染到哪个元素身上)
            /* 
            (1)挂载点可以使用  id选择器(vue推荐使用)  类选择器  标签选择器
            (2)如果选择器选中了多个元素,只会选择第一个元素
            (3)挂载点不能设置为html和body标签 (程序报错)
            */
            el: '#xb',
            //data: 要渲染的数据
            /* 数据驱动:vue会根据data中的数据,自动渲染页面(无需DOM操作) */
            data: {
                message: 'Hello Vue!'
            }
        })
    </script>
</body>

</html>

1.5-Vue的插值表达式介绍

插值表达式(模板语法)官网文档传送门:模板语法 — Vue.js

1.Vue会自动将data对象中的数据渲染到视图

2.在视图中,使用插值表达式来告诉vue,你想把数据渲染在什么位置

3.关于插值表达式一些注意点

      (1) {{ }} : 插值表达式,也叫胡子语法

      (2) 插值表达式作用:将数据渲染到页面

      (3) 支持二元运算 {{ age + 1 }}

      (4) 支持三元运算 {{ age>30?'老男人':'小鲜肉' }}

      (5) 支持数组与对象的取值语法

      (6) 不支持分支语法与循环语法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 1.导包 -->
    <script src="./vue.js"></script>
</head>

<body>
    <!-- 2.HTML结构 -->
    <div id="app">
        名字: {{ name }}   <br>
        年龄: {{ age + 1 }} <br>
        介绍: {{ age>30?'大叔':'欧巴' }}  <br>
        女朋友:{{ girlFried[1] }} <br>
        女儿: {{ daughter.name }} <br>

    </div>

    <script>
        /* 3.初始化配置 */
        /* 
        (1)Vue是导入vue.js之后得到的一个全局构造函数
        (2)调用Vue构造函数 创建一个vue实例对象
        */
        let app = new Vue({
            //el: element 用来设置vue实例的挂载点(将数据渲染到哪个元素身上)
            /* 
            (1)挂载点可以使用  id选择器(vue推荐使用)  类选择器  标签选择器
            (2)如果选择器选中了多个元素,只会选择第一个元素
            (3)挂载点不能设置为html和body标签 (程序报错)
            */
            el: '#app',
            //data: 要渲染的数据 
            /* 数据驱动:vue会根据data中的数据,自动渲染页面(无需DOM操作)
            (1)  {{ }} : 插值表达式,也叫胡子语法
            (2)  插值表达式作用:将数据渲染到页面
            (3)  支持二元运算   {{ age + 1 }}
            (4)  支持三元运算   {{ age>30?'老男人':'小鲜肉' }}
            (5)  支持数组与对象的取值语法
            (6)  不支持分支语法与循环语法
            */
            data: {
                message: 'Hello Vue!',
                name: 'xiaobai',
                age: 22,
                sex: '女',
                girlFried:['代码','学生','咖啡'],
                daughter:{
                    name:'嘟嘟',
                    age:1
                }
            }
        })
        
    </script>
</body>

</html>

02-Vue指令

指令名称指令作用示例简写形式
v-text设置元素的innerTextv-text="111"
v-html设置元素的innerHTMLv-html="<p>111</p>"
v-on给元素绑定事件v-on:click="doClick"@click="doClick"
v-bind设置元素的原生属性v-bind:src="./logo.png":src="./logo.png"
v-for列表渲染<li v-for=(item,index) in list></li>

1.1-Vue指令介绍

Vue指令官网文档传送门:https://cn.vuejs.org/v2/api/#v-text

1.Vue指令的本质是 : Vue为HTML标签新增的一些属性

      a. 每一个HTML标签都有自己的原生默认属性

            HTML标签的每一个属性都有自己独特的功能

            例如 img标签的src属性,a标签的href属性

      b. Vue认为,HTML标签原生的属性还不够用,所以Vue为HTML标签新增了很多的属性,每一个属性(指令)都可以实现一个强大的功能

2.在Vue中每一个指令都是以v-开头 (用于区分HTML标签原生属性)

语法 : 指令名=“指令值” 例如 v-text = msg

3.使用Vue的指令,就像使用HTML标签原生的属性一样去使用即可。

<img src="./images/logo.png" alt="图片不存在时的文本" title="鼠标悬停文本" v-on:click = "doClick">
src" : 原生属性,设置图片的路径
alt : 原生属性 ,设置图片不存在时的文本
title:原生属性,设置鼠标悬停文本
v-on:click:vue给img标签新增的属性, 给元素绑定点击事件

1.2-v-html指令

v-html指令官方文档传送门:https://cn.vuejs.org/v2/api/#v-html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 导包 -->
    <script src="./vue.js"></script>
</head>

<body>

    <!-- HTML结构 -->
    <div id="app">
        <p v-text="msg">张三</p>
        <p v-text="msg1">李四</p>
        <p v-html="msg1">王五</p>
    </div>
    <!-- 
         v-html 指令 
         作用: 设置元素的innerHTM
     -->
    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {
                msg: '我是xb!',
                msg1:'<h1>哈哈哈</h1>'
            }
        })
    </script>
</body>
</html>

1.3-v-on指令(绑定事件)

1.3.1- v-on基本使用

v-on指令官方文档传送门:https://cn.vuejs.org/v2/api/#v-on

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 导包 -->
    <script src="./vue.js"></script>

    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>

<body>

    <!-- HTML结构 -->
    <div id="app">
        <button v-on:click="doClick">点我</button>
        <div class="box" v-on:mouseenter="doEnter" v-on:mouseleave="doLeave"></div>
        <hr>
        <div class="box" @mouseenter="doEnter" @mouseleave="doLeave"></div>
    </div>
    <!-- 
         v-on 指令
            a.作用: 给元素绑定事件
            b.语法: 
                标准语法:v-on:事件名 = "方法名"
                简洁语法:@事件名 = "方法名"
            c.注意点
                事件名就是原生事件名去掉on
                事件方法定义在vue实例的methods对象中
     -->
    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {

            },
            //method:注册事件的方法名
            methods: {
                doClick() {
                    alert('我被点击了')
                },
                doEnter() {
                    console.log('鼠标移入我了')

                },
                doLeave() {
                    console.log('鼠标移出我了')
                }
            },
        })
    </script>
</body>

</html>

1.3.2- vue事件修饰符

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 导包 -->
    <script src="./vue.js"></script>

    <style>
        .father{
            width: 300px;
            height: 300px;
            background-color: #f00;
        }

        .son{

            width: 100px;
            height: 100px;
            background-color: #0f0;
        }
    </style>
</head>

<body>

    <!-- HTML结构 -->
    <div id="app">
        <div class="father" @click.once="fatherClick">
            我是father
            <div class="son" @click.stop="sonClick">我是son</div>
        </div>

        <form action="http://www.itheima.com">
            <button @click.prevent="doSubmit">点我啊</button>
        </form>

        <!-- 输入框 : enter键 -->
        <!-- <input type="text" @keyup.13="doUp"> -->
        <!-- 用enter,易读 -->
        <input type="text" @keyup.enter="doEnter">
    </div>
    <!-- 
        事件修饰符
            a.作用: 限定事件触发行为(例如阻止冒泡,阻止默认行为等)
            b.语法: @事件名.修饰符 = "方法名"
     -->
    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {

            },
            //method:注册事件的方法名
            methods: {
                fatherClick () {
                    console.log('我是父元素');
                },
                sonClick () {
                    console.log('我是子元素');

                },
                doSubmit () {
                    console.log('提交按钮');
                },
                doEnter(){
                    console.log('按了enter键')
                }
            },
        })
    </script>
</body>

</html>

1.3.3- vue方法中的this

  • 1.vue事件方法中的this指向 : vue实例

  • 2.vue事件方法中访问data对象中的成员 : this.属性名

    • vue会将data对象与methods对象中的成员 平铺到 vue实例中

  • 3.注意点: 如果事件处理代码没有写到methods中,而是写在行内则不需要this 就可以访问data对象中的成员

1.3.4- vue事件传参

1.vue中每一个事件方法都有一个默认参数 , 就是事件对象

2.如果主动给事件传参,则传递的参数 会 覆盖默认参数

3.如果希望同时传入事件对象 + 自定义参数,则可以使用 $event 

       v-on:click="doClick($event,自定义参数)"

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 导包 -->
    <script src="./vue.js"></script>

    <style>
        .box{
            width: 100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>

<body>

    <!-- HTML结构 -->
    <div id="app">
        {{ msg }}
        <div class="box" @click="boxClick(10)"></div>
        <br>
        <span v-text="news.title"></span>
        <button @click="deleteClick(news.id)">删除</button>
        <button @click="editClick($event,news.id)">编辑</button>
    </div>

    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {
                msg: '我是zyx!',
                news:{
                    title:'嘟嘟嘟',
                    id:10
                }
            },
            methods: {
                /* 
                1.vue中每一个事件方法都有一个默认参数 , 就是事件对象
                2.如果主动给事件传参,则传递的参数 会 覆盖默认参数
                3.如果希望 传递事件对象 + 自定义参数, 则可以使用 $event
                */
                boxClick(e){
                    console.log(e)
                },
                deleteClick(id){
                    console.log(`id为${id}的文章被删除`);
                },
                editClick(e,id){
                    console.log(e)
                    console.log(id)
                }
            },
        })
    </script>
</body>
</html>

1.4-v-bind指令 (绑定标准属性的值)

v-bind指令官网文档传送门:https://cn.vuejs.org/v2/api/#v-bind

      默认情况下,HTML标签原生属性无法获取vue中的数据

      如果希望原生属性也可以获取vue中的数据,就可以使用v-bind指令

1.4.1-v-bind指令基本使用

<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 导包 -->
    <script src="./vue.js"></script>
</head>

<body>

    <!-- HTML结构 -->
    <div id="app">
        <!--
            默认情况下,HTML标签原生属性无法获取vue中的数据 
            如果希望原生属性也可以获取vue中的数据,就可以使用v-bind指令
         -->
        <img v-bind:src="imagePath" v-bind:title="imageTitle"  alt="">
    </div>
    <!-- 
         v-bind 指令
        
            a.作用: 设置HTML标签原生属性的值
            b.语法: 
                标准语法:v-bind:原生属性名 = "属性值"
                简洁语法::原生属性名 = "属性值"
     -->
    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {
                imagePath:'./images/logo.png',
                imageTitle:'早早早'
            }
        })
    </script>
</body>

</html>

1.4.2-vue样式绑定

class与style样式绑定官方文档传送门:Class 与 Style 绑定 — Vue.js

v-bind 可以简写成 :

v-bind:class="{ '类名': bool, '类名': bool ......}"
如果值为true 该类样式就会被应用在元素身上, false则不会
注意点:如果类名有 - ,则需要使用引号包起来

1.5-v-for指令(列表渲染)

v-for指令官方文档传送门:列表渲染 — Vue.js

遍历数组语法:v-for="(value,index) in arr"

       value:数组元素

       index:数组下标

遍历对象语法:v-for="(value,key,index) in obj"

  • 该语法使用较少,了解即可

  • value:对象属性值

  • key:对象属性名

  • index:下标

1.6-v-model指令(双向数据绑定)

1.6.1-双向数据绑定基本使用

v-model指令官方文档传送们:https://cn.vuejs.org/v2/api/#v-model

`v-model只能用于表单元素!` `v-model只能用于表单元素!` `v-model只能用于表单元素!`

双向数据绑定

      表单元素的值进行了修改,这个变量的值也会跟着修改

      这个变量的值进行了修改,表单元素的值也会跟着修改

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 导包 -->
    <script src="./vue.js"></script>
    <style>
        span{
            font-size: 20px;
            color: red;
        }
    </style>
</head>

<body>

    <!-- HTML结构 -->
    <div id="app">
        <input type="text"  v-model="name">
        <p>我的名字是: <span>{{ name }}</span></p>
        <button @click="doClick">点我修改model</button>
    </div>
    <!-- 
        v-model 指令
            双向数据绑定
                a. 表单元素的值进行了修改,这个变量的值也会跟着修改
                b. 这个变量的值进行了修改,表单元素的值也会跟着修改

              v-model="变量名"
                a.   v-model只能用于表单元素
                b.   变量名要定义在data对象中
     -->
    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {
                name:''
            },
            methods: {
                doClick(){
                    this.name = 'zzz'
                }
            },
        })
    </script>
</body>
</html>

1.6.2-双向数据绑定的意义

双向数据绑定的意义

可以让我们快速得到表单元素的值

可以让我们快速设置表单元素的值

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <!-- 导包 -->
    <script src="./vue.js"></script>
</head>

<body>

    <!-- HTML结构 -->
    <div id="app">
        登陆框: <input type="text" v-model="username" placeholder="请输入用户名">
        <br>
        密码框: <input type="password" v-model="password" placeholder="请输入密码">
        <br>
        <button @click="loginClick">登录</button>
    </div>
   
    <script>
        /* 创建vue实例 */
        let app = new Vue({
            //el:挂载点
            el: '#app',
            //data: 要渲染的数据
            data: {
                username:'',
                password: ''
            },
            methods: {
                loginClick(){
                    //修改了表单元素 ->  修改了password
                    if(this.password != '123456'){
                        alert('密码错误,请重新输入')
                        //修改password  ->   修改了表单元素的值
                        this.password = ''
                    }
                }
            },
        })
    </script>
</body>
</html>

喜欢的可以点个赞哟!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值