前端开发之Vue框架

一、插值语法

介绍:

​ 插值语法是指,在Vue对象的data属性中定义的变量可以直接使用在标签可以直接使用在标签内部(无法直接使用在标签属性上),且数据实现双向绑定

插值语法中可存放的数据:

  • 变量
  • 对象取值
  • 数组取值
  • 简单的js语法
  • 函数

代码展示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue.js"></script>

</head>
<body>
<div id="app01">
    <!--    属性-->
    <p>姓名:{{name}}</p>
    <!--    数组-->
    <p>爱好:{{hobby[0]}}、{{hobby[1]}}、{{hobby[2]}}</p>
    <!--    对象-->
    <p>详细信息--->年龄:{{userinfo['age']}},身高:{{userinfo['height']}},体重:{{userinfo['weight']}}</p>
    <!--    标签(无法直接渲染标签)-->
    <p>博客:{{blogs}}</p>
    <!--    基本运算符-->
    <p>qq号:{{(69.47*100)*10+'2725'}}</p>
    <!--    三目运算符-->
    <p>性别:{{10>9?'男':'女'}}</p>
    <!--    函数(后面会说到,值是函数的返回值)-->
    <p>函数(这里后面会说到)</p>


</div>

</body>
<script>
    var app = new Vue({
        el: '#app01',
        data: {
            name: 'kangkang',  // 变量
            hobby: ['python', 'read', 'sports'],  //数组
            userinfo: {  // 对象
                age: 18,
                height: 178,
                weight: 135
            },
            blogs: '<a href="https://www.cnblogs.com/kangssssh/">点我进入</a>'  //标签
        },
    })
</script>
</html>

二、文本指令

简介:

​ vue提供的,都是 v-xx 写在标签属性上的 ,统称为指令,例如:a_url必须是data中定义的变量

​ -v-xx 写在标签上,任意标签

​ -v-xx="" ----》原来插值语法中能写的,它都能写,不要再加 {

常用指令:

image

1、v-html

简介:

  • 渲染标签/内容
    • 可以解决插值语法中无法将变量成渲染标签的问题
<div id="app01">
        <div v-html="blogs">该区域如果有内容将被替换</div>
</div>

<script>
    var app = new Vue({
        el: '#app01',
        data: {
            blogs: '<a href="https://www.cnblogs.com/kangssssh/">点击进入我的博客</a>'  
        },
    })
</script>

2、v-text

简介:

  • 将变量渲染在标签内部
    • v-text直接把字符串内容渲染在标签内部
<div id="app01">
    <span v-text="name"></span>
</div>
<script>
    var app = new Vue({
        el: '#app01',
        data: {
            name: 'kangkang',
        },
    })
</script>

3、v-show

简介:

  • 隐藏/显示标签
    • 变量绑定布尔值,控制该标签是否显示,控制方式(css方式隐藏标签):style="display: none;
<body>
<div id="app01">
    <img v-show="is_bool" src="https://img0.baidu.com/it/u=976897427,2971200549&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500" alt="">
</div>

</body>
<script>
    var app = new Vue({
        el: '#app01',
        data: {
            is_bool: true  
        },
    })
</script>

4、v-if

简介:

  • 删除/添加标签
    • 功能类似于v-show,可以控制标签的显示与隐藏,该方法控制的方式是dom操作(直接将标签删除或添加),在效率上低于v-show
<body>
<div id="app01">
    <img v-if="is_bool" src="https://img0.baidu.com/it/u=976897427,2971200549&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500" alt="">
</div>

</body>
<script>
    var app = new Vue({
        el: '#app01',
        data: {
            is_bool: true
        },
    })
</script>

image

image

三、属性指令

简介:

​ 通过变量控制标签的属性,变量发生变化时比标签的属性就会跟着变化

image

使用方法:

  • v-bind:属性名='变量'
  • 可简写---->::属性名='变量'
<body>
<div id="app01">

    <button @click="handleClick">点我更换美女</button>
    <p>
        <img :src="url" alt="">
    </p>

</div>

</body>
<script>
    var app = new Vue({
        el: '#app01',
        data: {
            url: 'https://img2.woyaogexing.com/2023/02/02/7c1f5d00a8943dd6a19ce4ef3f0f8c51.png'
        },
        methods:{
            handleClick(){
                this.url = 'https://img2.woyaogexing.com/2023/02/02/ebd8365fd22819abb50f186338b95021.jpeg'
            }
        }
    })
</script>

image

四、事件指令

简介:

​ 给标签绑定事件,通过事件的属性,实现js操作

image

使用方法:

  • 放在标签上:v-on:事件='函数'
  • v-on:事件名='函数'简写成@事件名='函数名'
<body>
<div id="app01">

    <button @click="handleClick">点我显示/隐藏美女</button>
    <p v-show="is_bool">
        <img :src="url" alt="">
    </p>

</div>

</body>
<script>
    var app = new Vue({
        el: '#app01',
        data: {
            url: 'https://img2.woyaogexing.com/2023/02/02/ebd8365fd22819abb50f186338b95021.jpeg',
            is_bool: true
        },
        methods: {
            handleClick() {
                this.is_bool = !this.is_bool
            }
        }
    })
</script>

image

五、class和style

简介:

​ 本身它两都是属性指令,但应用范围较广,且比较特殊所以单独讲

  • class:推荐用数组

    • :class='变量'
      • 变量可以是字符串,数组,对象
  • style:推荐用对象

    • :style='变量'
    • 变量可以是字符串,数组,对象
class可以等于:字符串,数组(用的多),对象
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>-->
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
    <style>
        .red{
            background-color: darkred;
            font-size: 50px;
        }
        .green{
            background-color: darkgreen;
            font-size: 50px;
        }
    </style>
</head>
<body>
<div id="app">
      <button @click="handleClick">点我变色</button>
      <div :class="class_obj">
          今天是情人节,异地恋可真难
      </div>
</div>
</body>
<script>
    var vm = new Vue({
        el:"#app",
        data:{
            class_obj:'red'
        },
      methods:{
            handleClick(){
                this.class_obj='green'
            }
      }
    })
</script>
</html>

image

六、条件渲染

简介:

​ 写在标签上,控制标签的显示与不显示

使用方法:

  • v-if="条件1"
    • 放在标签上,如果条件成立,该标签就现实,如果条件不成立,该标签就不显示
  • v-else-if="条件2"
    • 放在标签上,如果条件成立,该标签就现实,如果条件不成立,该标签就不显示
  • v-else
    • 放在标签上,上面条件都不成立,显示这个标签
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="app">
      <h3>条件渲染</h3>
      <div v-if="score>=90">优秀</div>
      <div v-else-if="score>=80">良好</div>
      <div v-else-if="score>=60">及格</div>
      <div v-else>不及格</div>
</div>
</body>
<script>
    var vm = new Vue({
        el:"#app",
        data:{
            score:81
        },
    })
</script>
</html>

七、列表渲染

简介:

​ 放在标签上,可以循环显示多个此标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<!--    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>-->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
</head>
<body>
<div id="app">

    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">


                <div class="text-center">
                    <h1>v-if+v-for 显示购物车</h1>
                    <button @click="handleClick" class="btn btn-danger">点我显示</button>
                </div>

                <div v-if="show">

                    <table class="table table-hover">
                        <thead>
                        <tr>
                            <th>id</th>
                            <th>商品名</th>
                            <th>商品价格</th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr v-for="item in good_list">
                            <th scope="row">{{item.id}}</th>
                            <td>{{item.name}}</td>
                            <td>{{item.price}}</td>
                        </tr>
                        </tbody>
                    </table>
                </div>


            </div>
        </div>


    </div>


</div>

</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            show: false,
            good_list: [
                {id: 1, name: '糖果', price: '29'},
                {id: 2, name: '口香糖', price: '29'},
                {id: 3, name: '芭比娃娃', price: '298'},
                {id: 4, name: '彩笔', price: '298'},
            ]
        },
        methods: {
            handleClick() {
                this.show = !this.show
            },

        }

    })

</script>
</html>

image/