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>
相关推荐
索然无味io40 分钟前
XML外部实体注入--漏洞利用
xml·前端·笔记·学习·web安全·网络安全·php
ThomasChan1231 小时前
Typescript 多个泛型参数详细解读
前端·javascript·vue.js·typescript·vue·reactjs·js
爱学习的狮王1 小时前
ubuntu18.04安装nvm管理本机node和npm
前端·npm·node.js·nvm
东锋1.31 小时前
使用 F12 查看 Network 及数据格式
前端
zhanggongzichu1 小时前
npm常用命令
前端·npm·node.js
anyup_前端梦工厂1 小时前
从浏览器层面看前端性能:了解 Chrome 组件、多进程与多线程
前端·chrome
zzlyx992 小时前
.NET 9 微软官方推荐使用 Scalar 替代传统的 Swagger
javascript·microsoft·.net
chengpei1472 小时前
chrome游览器JSON Formatter插件无效问题排查,FastJsonHttpMessageConverter导致Content-Type返回不正确
java·前端·chrome·spring boot·json
Bunury2 小时前
组件封装-List
javascript·数据结构·list
我命由我123452 小时前
NPM 与 Node.js 版本兼容问题:npm warn cli npm does not support Node.js
前端·javascript·前端框架·npm·node.js·html5·js