Vue基础语法(二)各类指令

文件指令

总结:插值表达式支持多元运算;
v-text打印的与 插值表达式一致;
v-html 能解析html语法 ;
v-once:结合插值表达式使用,赋值后不可更改。

<body>
    <div id="app">
        <!-- 1) 插值表达式 -->
        <p>{{ msg }}</p>
        <p>{{ 1 + 2 * 3 + '条' + msg }}</p>
        <!-- 2) v-text -->
        <p v-text="msg"></p>  //你是p
        <p v-text="'msg'"></p>   //msg
        <!-- 3) v-html:能解析html代码语法 -->
        <p v-text="html_msg"></p> //          <p v-text="html_msg"></p> //

        <p v-html="html_msg"></p>  //  html语法代码是否解析
        <!-- 4) v-once:结合插值表达式来使用,变量值一旦被初始化赋值后就不会再改变 -->
        <input type="text" v-model="val">
        <p>{{ val }}</p>
        <p v-text="val"></p>
        <p v-html="val"></p>
        <p v-once>{{ val }}</p>
    </div>
</body>
<script src="js/vue.min.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: '你是p',
            html_msg: '<b>html语法代码是否解析</b>',
            val: '000'
        }
    })
</script>

在这里插入图片描述

属性指令

总结:v-bind: 可以简写为 :
通过一个变量真假控制一个类名是否起作用 {x:1,y:0} 用大括号
多类名用中括号括起来,多类名综合使用采用[{x:1},{y:0}]的形式
style 属性用可以直接 = 变量名 :style="my_style

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>属性指令</title>
    <style>
        .cls_a {
            width: 200px;
            height: 200px;
            background-color: yellowgreen;
        }
        .cls_b {
            text-align: center;
            line-height: 200px;
            border-radius: 50%;
        }
    </style>
</head>
<body>
    <!-- 属性指令:v-bind -->
    <div id="app">
        <!-- 1) 自定义属性绑定变量 -->
        <p v-bind:abc="a"></p>

        <!-- 2) title属性 -->
        <p title="鼠标悬浮的文本提示">这是一个p段落1</p>
        <p v-bind:title="my_title">这是一个p段落2</p>

        <!-- 3) class属性 -->
        <!-- 重点:v-bind: 可以简写为 : -->
        <!-- my_class可以被任意赋值 -->
        <p :class="my_class">这是一个p段落3</p>

        <!--{类名:类是否起作用, ...}  类是否起作用 写的是变量,变量的值为true或false-->
        <!--应用场景:通过一个变量真假控制一个类名是否起作用-->
        <p :class="{x:1, y:0, z:is_able}">这是一个p段落4</p>

        <!--[类名1, ..., 类名n]: 多类名,每一个类名既可以是字符串常量也可以是变量-->
        <p :class="[o, p, q, 'oqp']">这是一个p段落5</p>

        <!--多类名综合使用-->
        <p :class="[o, p, q, 'oqp', {k: true}, {h: false}]">这是一个p段落6</p>


        <!-- 4) style属性 -->
        <p :style="my_style">这是一个p段落</p>
        <p :style="{color: 'red', backgroundColor: yellow}">这是一个p段落</p>

    </div>
</body>
<script src="js/vue.min.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            a: 'A',
            my_title: '鼠标悬浮的文本提示',
            my_class: 'cls_a cls_b',
            is_able: true,
            o: 'O',
            p: 'P',
            q: 'Q',
            my_style: {
                color: 'red',
                // 'font-size': '30px'
                fontSize: '30px'
            },
            yellow: 'greenyellow'
        }
    })
</script>
</html>

在这里插入图片描述在这里插入图片描述

事件指令

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件指令</title>
    <style>
        body {
            /*不允许页面文本被选中*/
            user-select: none;
        }
    </style>
</head>
<body>
    <!-- 指令:v-on:事件名="变量" -->
    <!-- 简写:@事件名="变量" -->
    <div id="app">
        <p v-on:click="fn1" :style="{color: m_c}">{{ msg }}</p>
        <p @mouseover="fn2" @mouseleave="fn3" @mousedown="fn4" @mouseup="fn5">{{ msg }}</p>


        <!--事件需要参数时-->
        <!-- 注意:事件绑定 方法名() 等价 方法名,不能调用方法,而是作为传参的标志 -->
        <p @click="func('abc')">{{ msg }}</p>

        <!--类别django传参的应用场景,可以标识具体点击的是哪个li-->
        <!--{% for %}-->
        <!--<li @click="func({{forloop.index}})"></li>-->
        <!--{% end for%}-->


        <!--传入事件对象-->
        <p @click="func1($event)">{{ msg }}</p>
    </div>
</body>
<script src="js/vue.min.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            msg: '你是p',
            m_c: 'red'
        },
        methods: {
            func1: function (ev) {
                console.log(ev);
                // 数据点击页面的点击点
                console.log(ev.clientX);
                console.log(ev.clientY);
            },
            func: function (txt) {
                this.msg = txt
            },
            fn1: function () {
                if (this.m_c == 'red') {
                    this.m_c = 'blue'
                } else {
                    this.m_c = 'red'
                }
            },
            fn2: function () {
                this.msg = '鼠标悬浮了'
            },
            fn3: function () {
                this.msg = '鼠标离开了'
            },
            fn4: function () {
                this.msg = '鼠标按下了'
            },
            fn5: function () {
                this.msg = '鼠标抬起了'
            }
        }
    })
</script>
</html>

条件指令

<head>
    <meta charset="UTF-8">
    <title>文本指令</title>
    <style>
        .box {
            width: 200px;
            height: 100px;
            background-color: darkgray;
        }
        .pg1 { background-color: red; }
        .pg2 { background-color: yellow; }
        .pg3 { background-color: blue; }
    </style>
</head>
<body>
    <div id="app">
        <!-- v-if与v-show的变量值都是bool,控制着显隐 -->
        <!-- v-if隐藏时标签不被渲染,v-show隐藏时标签渲染,用display:none来隐藏 -->
        <!-- 特殊属性key是vue在内存中建立缓存的标志, 来优化渲染的效率 -->
        <p v-if="is_if" key="my_if">v-if的显示与隐藏</p>
        <p v-show="is_show" key="my_show">v-show的显示与隐藏</p>


        <p>
            <button @click="btn_click('pg1')">红</button>
            <button @click="btn_click('pg2')">黄</button>
            <button @click="btn_click('pg3')">蓝</button>
            <div class="box pg1" v-if="pg == 'pg1'" key="pg1"></div>
            <div class="box pg2" v-else-if="pg == 'pg2'" key="pg2"></div>
            <div class="box pg3" v-else key="pg3"></div>
        </p>
    </div>
</body>
<script src="js/vue.min.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            is_if: true,
            is_show: true,
            pg: 'pg1'
        },
        methods: {
            btn_click: function (pg_num) {
                this.pg = pg_num
            }
        }
    })
</script>

循环指令

<head>
    <meta charset="UTF-8">
    <title>文本指令</title>
    <style>
        p {
            padding-left: 30px;
        }
    </style>
</head>
<body>
    <div id="app">
        <p>{{ array[1] }}</p>
        <p>{{ person['age'] }}</p>
        <div>循环array</div>
        <p v-for="v in array">{{ v }}</p>

        <div>带索引循环array</div>
        <p v-for="(v, i) in array">{{ v }}索引是{{ i }}</p>

        <div>循环dict</div>
        <p v-for="v in person">{{ v }}</p>

        <div>带key循环dict</div>
        <p v-for="(v, k) in person">{{ v }}键是{{ k }}</p>

        <div>带key带索引循环dict</div>
        <p v-for="(v, k, i) in person">{{ v }}键是{{ k }}索引是{{ i }}</p>

        <ul v-for="person in persons">
            <!--{{ person }}-->
            <li v-for="(v, k) in person">{{ k }}: {{ v }}</li>
        </ul>

    </div>
</body>
<script src="js/vue.min.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            array: ['iso', 'android', 'winPhone'],
            person: {'name': 'Jobs', 'age': 88, 'gender': '男'},
            persons: [
                {'name': 'Jason', 'age': 58},
                {'name': 'Jerry', 'age': 68},
                {'name': 'Owen', 'age': 17},
            ]
        }
    })
</script>

前端array的操作

<script>
    arr = [1, 2, 3, 4, 5];
    console.log(arr);
    // 从index开始往后操作length长度,替换为args
    // arr.splice(index, length, args);
    // arr.splice(2, 3, 9, 9);  // [1, 2, 9, 9]  替换
    // arr.splice(2, 3);  // [1, 2]  删除
    arr.splice(2, 0, 8);  // [1, 2, 8, 3, 4, 5]  插入
    console.log(arr);
</script>

留言案例

<body>
    <div id="app">
        <input type="text" v-model="txt">
        <button @click="send_msg">留言</button>
        <ul>
            <li v-for="(msg, i) in msg_arr" @click="delete_msg(i)">{{ msg }}</li>
        </ul>
    </div>
</body>
<script src="js/vue.min.js"></script>
<script>
    new Vue({
        el: '#app',
        data: {
            txt: '',
            // msg_arr: ['初始留言1', '初始留言2']
            msg_arr: []
        },
        methods: {
            send_msg: function () {
                // this.txt
                // this.msg_arr
                if (this.txt) {
                    this.msg_arr.push(this.txt);
                    this.txt = ''
                }
            },
            delete_msg: function (index) {
                this.msg_arr.splice(index, 1)
            }
        }
    })
</script>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值