Vue练习案例(上)

案例一:入门,基本语法----点击事件,参数双向绑定

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

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue demo</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<div id="app1" style="text-align: center;">
    <h1>{{ count }}</h1>
    <button v-on:click="clickButton">点击</button>
</div>

<div id="Application" style="text-align: center;">
    <h1>{{title}}</h1>
    <div v-if="needlogin">账号:<input v-model="userName" type="text" /></div>
    <div v-if="needlogin">密码:<input v-model="password" type="password" /></div>
    <div v-on:click="click"
        style="border-radius: 30px;width: 100px; margin:20px auto; color: white; background-color: blue;">
        {{buttonTitle}}</div>
</div>
<script>
    // const { createApp, ref } = Vue
    Vue.createApp({
        data() {
            return {
                count: 0,
                needlogin: true,
                userName: "",
                password: "",
                buttonTitle: "登录",
                title: '未登录,请先登录!'
            }
        },
        methods: {
            clickButton() {
                this.count = this.count + 1
            },
            click() {
                if (this.needlogin) {
                    this.login();
                } else {
                    this.logout();
                }
            },
            login() {
                if (this.userName.length > 0 && this.password.length > 0) {
                    alert(`userName=${this.userName}, password=${this.password}`)
                    this.title = `欢迎您:${this.userName}`
                    this.needlogin = false
                    this.buttonTitle = '注销'

                    this.userName = ''
                    this.password = ''

                } else {
                    alert('请输入账号Miami')
                }
            },
            logout() {
                this.needlogin = true
                this.buttonTitle = '登录'
                this.title = '未登录,请先登录!'
            }
        },
    }).mount('#Application');
</script>

</html>

案例二:V-for用法

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

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue demo</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>

<body>
    <div id="app1">
        <div v-for="item in list">
            {{item}}
        </div>
    </div>
    <div id="app2">
        <ul>
            <li v-for="(item,index) in handle(list)">
                <div>{{index}}</div>
                <div>{{item.name}}</div>
                <div>{{item.num}}</div>
            </li>
        </ul>
        <button @click="click">逆序</button>
    </div>
    =========
    <div id="app3">
        <ol>
            <li v-for="(value,key,index) in person" :key="index">
                {{index}}-{{key}}:{{value}}
            </li>
        </ol>
    </div>
</body>
<script>
    Vue.createApp({
        data() {
            return {
                list: [1, 2, 3, 4, 5]
            }
        },
    }).mount("#app1");
    Vue.createApp({
        data() {
            return {
                list: [
                    {
                        name: "liu1",
                        num: 3,
                    },
                    {
                        name: "liu21",
                        num: 5,
                    },
                    {
                        name: "liu31",
                        num: 1,
                    },
                ]
            }
        },
        methods: {
            click(){
                this.list.reverse()
            },
            handle(data){
                return data.filter(obj=> obj.name != 'liu21')
            }
        },
    }).mount("#app2");
    Vue.createApp({
        data() {
            return {
                person:{
                    name:"zhang",
                    age:14
                }
            }
        },
    }).mount("#app3");

</script>

</html>

案例三:v-for与列表

<!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">
    <title>待办任务列表</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<!-- push pop尾部追加或移除;shift unshift头部追加或移除,splice分割 -->
<body>
    <div id="Application">
        <!--输入框元素,用来新建待办任务-->
        <form @submit.prevent="addTask">
            <span>新建任务</span>
            <input v-model="taskTitle" placeholder="请输入任务标题..." />
            <input v-model="taskDesc" placeholder="请输入任务描述..." />
            <button>添加</button>
        </form>
        <!--有序列表,使用v-for来构建-->
        <ol>
            <li v-for="(item,index) in todos">
                {{item}}
                <button @click="remove(index)">
                    删除任务
                </button>
                <br/>
            </li>
        </ol>
    </div>
</body>
<script>
    Vue.createApp({
        data() {
            return {
                todos: [
                    {
                        title: "学习",
                        description: "学习vue技术"
                    },
                    {
                        title: "写作",
                        description: "创作小说"
                    },
                    {
                        title: "娱乐",
                        description: "玩少年三国志"
                    },
                ],
                taskTitle: "",
                taskDesc: ""
            }
        },
        methods: {
            addTask() {
                if (this.taskTitle.length == 0) {
                    alert('请输入任务标题')
                    return
                }
                if (this.taskDesc.length == 0) {
                    alert('请输入任务描述')
                    return
                }
                this.todos.push({ taskTitle: this.taskTitle, taskDesc: this.taskDesc })
                this.taskTitle = ""
                this.taskDesc = ""
            },
            remove(index) {
                this.todos.splice(index, 1)
            }
        }
    }).mount("#Application");
</script>

</html>

案例四:计算属性

<!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">
    <title>计算属性-基于存储属性</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<!-- push pop尾部追加或移除;shift unshift头部追加或移除,splice分割 -->
<body>
    <div id="Application">
        <div>{{type}} {{count}}</div>
        <button @click="click">增加</button>
        <button @click="jian">减少</button>
    </div>
</body>
<script>
    Vue.createApp({
        data() {
            return {
                count: 0
            }
        },
        computed:{
            type(){
                return this.count>5?"大":"小"
            }
        },
        methods: {
            click(){
                this.count = this.count+1;
            },
            jian(){
                this.count = this.count-1;
            }
        }
    }).mount("#Application");
</script>
</html>
相关推荐
迷雾漫步者22 分钟前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-1 小时前
验证码机制
前端·后端
燃先生._.2 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖3 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235243 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240254 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar4 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人4 小时前
前端知识补充—CSS
前端·css
GISer_Jing5 小时前
2025前端面试热门题目——计算机网络篇
前端·计算机网络·面试