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>
相关推荐
万少1 分钟前
使用Trae轻松安装openclaw的教程-附带免费token
前端·openai·ai编程
颜酱18 分钟前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
浪浪山_大橙子18 分钟前
OpenClaw 十分钟快速,安装与接入完全指南 - 推荐使用trae 官方 skills 安装
前端·人工智能
忆江南21 分钟前
iOS 可视化埋点与无痕埋点详解
前端
离开地球表面_9923 分钟前
金三银四程序员跳槽指南:从简历到面试再到 Offer 的全流程准备
前端·后端·面试
_柳青杨25 分钟前
跨域获取 iframe 选中文本?自己写个代理中间层,再也不求后端!
前端
比尔盖茨的大脑25 分钟前
事件循环底层原理:从 V8 引擎到浏览器实现
前端·javascript·面试
天才熊猫君25 分钟前
Vue3 命令式弹窗原理和 provide/inject 隔离机制详解
前端
bluceli26 分钟前
Vue 3 Composition API深度解析:构建可复用逻辑的终极方案
前端·vue.js
程序员ys28 分钟前
前端权限控制设计
前端·vue.js·react.js