【Vue.js学习笔记】7:v-for渲染,Vue的小Demo

版权声明:本文为博主原创学习笔记,如需转载请注明来源。 https://blog.csdn.net/SHU15121856/article/details/85224963

v-for渲染

v-for是Vue中常用的列表渲染方法, 可以将一个列表渲染为一系列的HTML元素,也可以用来遍历对象内的k-v对。另外关于模板元素渲染在官方文档上见这里

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue.js</title>
    <link rel="stylesheet" href="style2.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<!--这个vue-app是根容器-->
<div id="vue-app">
    <h4>遍历字符串数组:</h4>
    <ul>
        <li v-for="c in characters">{{c}}</li>
    </ul>
    <h4>遍历对象数组:</h4>
    <ul>
        <li v-for="u in users">{{u.name}},{{u.age}}</li>
    </ul>
    <h4>带下标的遍历:</h4>
    <ul>
        <li v-for="(c,i) in characters">{{c}}的下标是{{i}}</li>
    </ul>
    <h4>不放在列表里,而是放在div里(一下生成多个格式一样的div很方便):</h4>
    <div v-for="(u,i) in users" style="border: 1px solid">
        <p>{{i}} . {{u.name}}</p>
        <p>{{u.age}}</p>
    </div>
    <h4>有时不需要那么多div,只是要做多元素渲染,在template上使用v-for:</h4>
    <template v-for="(u,i) in users">
        <p>{{i}} . {{u.name}}</p>
        <p>{{u.age}}</p>
    </template>
    <h4>遍历对象(相当于遍历一个字典):</h4>
    <template v-for="(u,i) in users">
        <p>现在是第{{i+1}}个对象</p>
        <div v-for="(v,k) in u">{{k}}={{v}}</div>
    </template>
</div>
<script src="app8.js"></script>
</body>
</html>

app8.js

// 实例化vue对象
new Vue({
    el: "#vue-app",
    data: {
        // 要遍历的两个数组
        characters: ["Tom", "Flora", "John"],
        users:[
            {name:"lzh1",age:21},
            {name:"lzh2",age:22},
            {name:"lzh3",age:23}
        ]
    }
});

运行结果

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

Vue的小Demo

本来教学视频里是沙袋,不过找不到素材,就用一folder的素材代替了。

这个Demo就是不断点击一个按钮,然后减少一个耐久度值,并通过动态绑定css在一个进度条上显示出来,当减少到0时把那个按钮隐藏掉,同时把图片更换成被打破的folder。点击重新开始就会还原这些值。

index.html

<!DOCTYPE html>
<html lang="en" xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Vue.js</title>
    <link rel="stylesheet" href="style3.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<!--这个vue-app是根容器-->
<div id="vue-app">
    <!--图片-->
    <!--用动态绑定css样式来实现图片的更换-->
    <div id="folder" v-bind:class="{burst:ended}"></div>
    <!--进度情况-->
    <div id="progress-bar">
        <!--用数据别绑定,将耐久度绑定到这个div的样式上并构成百分比-->
        <div v-bind:style="{width:health+'%'}"></div>
    </div>
    <!--控制按钮-->
    <div id="controls">
        <!--用v-on控制点击时触发的方法,用v-show控制敲击按钮何时不展示-->
        <button v-on:click="punch()" v-show="!ended">敲击</button>
        <button v-on:click="restart()">重新开始</button>
    </div>
</div>
<script src="app9.js"></script>
</body>
</html>

app9.js

// 实例化vue对象
new Vue({
    el: "#vue-app",
    data: {
        health: 100,//100-进度条的进度,即folder的耐久度..
        ended: false //folder是否已经被打破
    },
    methods: {
        //点击"敲击"
        punch: function () {
            this.health -= 10;
            if (this.health <= 0) {
                this.ended = true;
            }
        },
        //点击"重新开始"
        restart: function () {
            this.health = 100;
            this.ended = false;
        }
    }
});

style3.css

#folder {
    width: 400px;
    height: 500px;
    margin: 0 auto;
    background: url("./img/folder.png") center no-repeat;
    /*图片占容器80%*/
    background-size: 80%;
}

/*动态绑定的css样式,当ended为true时这里的样式将生效*/
#folder.burst{
    background-image: url("./img/folder_broken.png");
}

#progress-bar{
    width:200px;
    border: 2px black solid;
    margin: 0 auto 20px auto;
}

#progress-bar div{
    height: 20px;
    background-color: crimson;
}

#controls{
    width: 160px;
    margin: 0 auto;
}

#controls button{
    margin-left: 20px;
}

运行结果

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

猜你喜欢

转载自blog.csdn.net/SHU15121856/article/details/85224963