Vue基础

什么是Vue?

Vue是一款用于Vue构建用户界面的 JavaScript 框架,它提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。

一.Vue.js入门

1.下载Vue.js

进入下面这个https://unpkg.com/vue@3/dist/vue.global.js网址,如下图所示:

鼠标右击页面,点击另存为

把它存放在自己熟悉的地方,方便使用时引入

vue.global.js是默认的名字,嫌长也可以改为Vue.js

2.入门程序:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>案例</title>
    <script src="../js/vue.global.js"></script>
</head>
<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <buttn @click="change">改变h1标签内容</buttn>
    </div>
</body>
<script>
    //从vue中提取createApp函数,这个函数是用来创建vue实例的
    //{ createApp }是一个对象形式,但是只有一个属性,这里的意思就是接收Vue里面的createApp属性
    const { createApp } = Vue;
    //调用createApp函数,创建vue实例
    const app =  createApp({
        data(){
            //date函数中定义的是vue中的数据
            return{
                //页面的数据,是key:value的形式
                //页面想要拿到这个数据可以通过插值语法:{{key}},就能通过key拿到对应的值value
                //比如我这个页面中的{{msg}}
                msg:"第一个vue程序"
            }
        },
        methods: {
               //这里用来定义页面中的方法
               change(){
                //这里的this指的是app对象
                this.msg = "h1内容改变"
            }
        }
    })
    //挂载app
    app.mount("#app");
</script>
</html>

应用实例必须在调用了 .mount() 方法后才会渲染出来。该方法接收一个“容器”参数,可以是一个实际的 DOM 元素或是一个 CSS 选择器字符串:

我们这里就是传入的一个css选择器字符串,将vue实例挂载到id为app的盒子上。

vue相比于之前学习的jequery优点之一就在于,vue不用去操作DOM元素,直接改变数据就行,就可以改变页面内容。

二.Vue基本语法:

1.插值语法:

{{msg}}:双大括号标签会被替换为data中 msg 属性的值,例如入门程序中的{{msg}},最后会被替换为data中返回的msg属性的值,即第一个Vue程序。

双大括号中只要填入对应的key就能拿到对应的值value

2.v-bind:

v-bind用于属性绑定:双大括号不能在 HTML attributes 中使用。想要响应式地绑定一个 attribute,应该使用 v-bind,可以简写为 :

例如:

<img v-bind:src="path">

或者简写为:

<img :src="path">

这样当我们data中的path属性改变,img标签的src属性值就会改变,从而改变图片

我们也可以同时绑定多个属性:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>案例</title>
    <script src="../js/vue.global.js"></script>
</head>
<body>
    <div id="app">
        <div :="moreAttribute">
            <h1>v-bind介绍</h1>
        </div>
    </div>
</body>
<script>
    const { createApp } = Vue;
    const app =  createApp({
        data(){
            return{
                moreAttribute:{
                    id:"b1",
                    class:"box"
                }
            }
        },
        methods: {

        }
    })
    //挂载app
    app.mount("#app");
</script>
</html>

 以JavaScript对象的形式来绑定多个属性,

运行检查元素标签可以发现,已经将id和class绑定到了div标签上

3. class与style绑定

数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute,我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为 class 和 style 的 v-bind 用法提供了特殊的功能增强。

class绑定:

第一种和v-bind指令一样

<div :class="classname"></div>

通过calssname的值来控制标签的类名,从而控制样式

例如:

<style>
    .red{
        background-color: red;
    }

    .green{
        background-color: green;
    }
</style>

<script>
    const { createApp } = Vue;
    const app =  createApp({
        data(){
            return{
                classname:"red"
            }
        }
    })
    //挂载app
    app.mount("#app");
</script>

当data中的classname中的值变为green,div的背景颜色就会从红色变为绿色。

第二种就是对象形式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>案例</title>
    <script src="../js/vue.global.js"></script>
</head>
<style>
    .red{
        background-color: red;
    }

    .green{
        background-color: green;
    }
</style>
<body>
    <div id="app">
        <div :class="{ green:isGreen, red:isRed }">
            <h1>class绑定</h1>
        </div>
    </div>
</body>
<script>
    const { createApp } = Vue;
    const app =  createApp({
        data(){
            return{
                isGreen:false,   
                isRed:true
            }
        }
    })
    //挂载app
    app.mount("#app");
</script>
</html>

 样式属性名后面为true,则显示改类样式,如果都为true,那么data中哪个在前面哪个就显示哪个,上面例子中isGreen在前面就显示绿色背景。

第三种是数组形式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>案例</title>
    <script src="../js/vue.global.js"></script>
</head>
<style>
    .red{
        background-color: red;
    }

    .green{
        background-color: green;
    }
</style>
<body>
    <div id="app">
        <div :class="['red','green']">
            <h1>class绑定</h1>
        </div>
    </div>
</body>
<script>
    const { createApp } = Vue;
    const app =  createApp({
        data(){
            return{
                
            }
        },
        methods: {

        }
    })
    //挂载app
    app.mount("#app");
</script>
</html>

如果数组里面的样式设置的是相同的属性,比如上面例子中都是设置背景颜色,那么哪个在前面就显示哪个。也可以在数组中嵌套对象。

style绑定:

:style=”{样式属性名1:变量,样式属性名2:变量2,....}”;

如果样式属性名是background-color这种就要写成:style="{backgroundColor:变量名}"这种形式,

或者也可以给属性名打上单引号,:style="{'background-color':变量名}"

 4.v-text与v-html

v-text只会将内容解释为普通文本,要输出真正的html,需要使用v-html指令。

    <div id="app">
        <p v-text="type"></p>
        <p v-html="type"></p>
    </div>

    data(){
         return{
             type:"<b>你好</b>"
            }
       }

结果:

5.v-if与v-show

v-if:

v-if是条件渲染,如果v-if中的表达式为真,就会在DOM中生成一个元素,反之就会移除一个元素

<div id="app">
        <p v-if="b">你好</p>
</div>

data(){
    return{
         b:true
    }
}

当b的值为true就会生成 这个p标签,反之移除

如果想切换多个元素,则可以使用<template>元素当作包装元素,在<template>元素上使用v-if, 就可以进行多个元素的切换

    <div id="app">
        <template v-if="b">
            <p>你好</p>
            <button>按钮</button>
        </template>
    </div>

v-if也可以和v-else以及v-else-if一起使用和Java中类似

v-show:

根据表达式的值来显示或隐藏HTML元素,当v-show表达式的值为false时,元素将被隐藏,v-show不会生成或者移除元素,v-show是通过控制css的display来控制元素是否显示的,当表达式为false,就会将该元素的display的值变为none。

而且v-show不支持 <template>也不可以和v-else以及v-else-if一起使用。

当元素进行频繁显示和隐藏时,建议使用v-show,不会频繁切换建议使用v-if

6.v-for

v-for是列表渲染,v-for 指令的值需要使用 item in items 形式的特殊语法,items是源数据的数组,而 item 是迭代项的别名。

data() {
  return {
    names:["lily","lucy","hanmeimei","lilei"]
  }
}
<ul>
    <li v-for="item in names">
        {{item}}
    </li>
</ul>

结果:

如果想获取下标,就需要写成:

<li v-for="(value,index) in names">
                {{value}}--{{index}}
</li>

结果: 

如果需要遍历一个对象所有的属性,

<li v-for="(value,key,index) in user">
                {{value}}--{{key}}---{{index}}
</li>

 data(){
                return{
                    user:{
                        name:"张三",
                        age:18,
                        sex:"男"
                    }
                }
            }

结果:

 7.v-model

 v-model能够将表单输入框中的内容同步给JavaScript中data中的相应变量

<input v-model="text">

这行代码表示,这个输入框中的内容与text变量的值进行了双向数据绑定,即向输入框中输入内容,变量text的值会改变,text的值改变,输入框中的内容也会改变。 

v-model指令可以在表单 input、textarea以及select元素上创建双向数据绑定;

v-model绑定checkbox:单个勾选框和多个勾选框

单个勾选框:

  • v-model即为布尔值。

  • 此时input的value属性并不影响v-model的值。

多个复选框:

  • 当是多个复选框时,因为可以选中多个,所以对应的data中属性是一个数组。

  • 当选中某一个时,就会将input的value添加到数组中。

v-model绑定select 单选和多选两种情况

单选:只能选中一个值

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

多选:可以选中多个值

v-model绑定的是一个数组;

当选中多个值时,就会将选中的option对应的value添加到数组fruit中

v-model 会忽略任何表单元素上初始的 valuecheckedselected 属性。它将始终将当前绑定的 JavaScript 状态视为数据的正确来源。你应该在 JavaScript 中使用data 选项来声明该初始值。

修饰符:

1. .lazy- 取代 input 监听 change 事件:在默认情况下,v-model 在 input 事件中同步输入框的值与数据,但你可以添加一个修饰符 lazy ,从而转变为在 change 事件中同步:

不加lazy修饰符时改变文本框的值,data中变量的值也会马上改变,添加了lazy后,只有当文本框失去焦点后data中变量的之才会改变。

2. .number- 输入字符串转为数字

3.  .trim - 输入首尾空格过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值