vue学习笔记【2】--模板语法

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.1.2/vue.global.js"></script>
    <title>Document</title>
    <style>
        .active {
            background-color: salmon;
        }

        .static {
            font-size: 32px;
        }
    </style>
</head>

<body>
    <div id="app">

        一、插值

        <p>Using v-html directive:<span v-html="rawHtml"></span></p>
        <!--原生html需要使用v-html引用-->

        <p>{{msg}}</p>
        <!--双大括号会将数据解释为普通文本-->

        <p><input type="text" v-model="msg"></p>
        <!--v-model實現表單元素的數據綁定
        v-model本质上是一个语法糖。上面代码本质上是<input :value="msg" @input="msg = $event.target.value">
        -->
        <p><input :value="msg" @input="msg = $event.target.value"></p>

        <p><a v-bind:href="link">{{site}}</a></p>
        <!-- v-bind:属性名 简写格式 :属性名,所以这里简写为:href -->
        <p><a :href="link">{{site}}</a></p>
        <!-- 指令的意思是:“将这个元素节点的 href attribute 和 Vue 实例的 link property 保持一致”。 -->
        <p>
            <input type="text" v-model="site">
            <input type="text" v-model="link">
        </p>

        <p> {{ number + 1 }}</p>
        <p> {{ ok ? 'YES' : 'NO' }}</p>
        <p> {{ msg.split('').reverse().join('') }}</p>
        <!-- 文本倒序 -->
        <div v-bind:id="'list-' + id">{{id}}</div>
        <!-- 这些表达式会在当前活动实例的数据作用域下作为 JavaScript 被解析。有个限制就是,每个绑定都只能包含单个表达式,不能是js语句,所以下面的例子都不会生效。 -->

        二、样式绑定

        <div class="static" :class="{ active: isActive, 'text-danger': hasError}">zhangsan</div>
        <!-- 由于hasError为false,渲染结果为:<div class="static active"></div> -->
        <div class="static" :class="classobj">lisi</div>
        <!-- 也可以定义一个class集合,再调用,跟上面效果相同 -->

        <div :class="[activeClass, errorClass]">wangwu</div>
        <!-- 我们可以把一个数组传给 :class,以应用一个 class 列表,渲染的结果为:<div class="active text-danger"></div> -->
        <div :class="[{ active: isActive }, errorClass]">mazi</div>
        <!-- 数组语法中也可以使用对象语法 -->

        <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">hello</div>
        <div :style="styleObject">hello</div>
        <div :style="[activeColor, styleObject]">hello</div>
        <!-- style也可以这样处理 -->

        三、条件渲染

        <div>
            <h3>if-else</h3>
            <div v-if="age>18">大人电影</div>
            <div v-else>青少年电影</div>
            <input type="text" v-model="age">
            <!-- 提供一个输入框,改变age的值,可以切换成人和青少年电影 -->

            <h3>if-else-if</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>
            <input type="text" v-model="score">

            <h1 v-show="age>18">Hello!</h1>
            <!-- v-show和v-if的比较 -->
            <!-- 相同点:v-if与v-show都可以动态控制dom元素显示隐藏
            不同点:v-if显示隐藏是将dom元素整个添加或删除,而v-show隐藏则是为该元素添加css--display:none,dom元素还在。 -->

            四、循环渲染

            <ul>
                <!-- 针对数组的循环 -->
                <li v-for="stu,index in students">序号:{{index}} 姓名:{{stu.name}} 年龄:{{stu.age}}</li>
                <!-- v-for 还支持一个可选的第二个参数,即当前项的索引。 -->
            </ul>

            <ul>
                <li v-for="value,key in student">{{key}} ::: {{value}}</li>
                <!-- 针对字典可以做key,value的循环 -->
            </ul>
        </div>
    </div>
    <script>
        const Counter = {
            data() {
                return {
                    msg: "hello world",
                    rawHtml: "<a href=''>hello</a>",
                    site: "百度",
                    link: "https://www.baidu.com",
                    number: 100,
                    ok: "NO",
                    id: 3,
                    isActive: true,  // 控制样式是否显示,若为true则显示
                    hasError: false,
                    classobj: {
                        active: this.isActive && !this.error, // 我们也可以在这里绑定一个返回对象的计算属性
                        'text-danger': this.error && this.error.type === 'fatal'
                    },
                    activeClass: 'active',
                    errorClass: 'text-danger',
                    activeColor: 'green',
                    fontSize: 30,
                    styleObject: {
                        color: 'red',
                        fontSize: '13px'
                    },
                    age: 10,
                    score: 80,
                    students: [{ "name": "zhangsan", "age": 22 }, { "name": "lisi", "age": 24 }, { "name": "wangwu", "age": 21 }],
                    student: { "name": "yuan", "age": 22 }
                }
            }
        }
        vm = Vue.createApp(Counter).mount('#app')
    </script>
</body>

</html>

 

posted on 2021-10-10 21:16  torotoise512  阅读(21)  评论(0编辑  收藏  举报