Vue核心基础5:数据监测、收集表单数据、过滤器

1 数据监测

【代码】

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>总结</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <h2>学生信息</h2>
        <!-- 添加按钮,实现功能 -->
        <button @click="student.age++">年龄+1</button>
        <button @click="addSex">添加性别属性,默认值为男</button>
        <button @click="updateSex">修改性别</button>
        <button @click="addFriend">在朋友列表首位添加一个朋友</button>
        <button @click="updatefirstF">修改第一个朋友的名字为:小章</button>
        <button @click="addHobby">添加一个爱好</button>
        <button @click="updatefirstHobby">修改第一个爱好为:吃饭</button>



        <h3>姓名:{{student.name}} ---- 年龄:{{student.age}}</h3>
        <h3 v-if="student.sex">性别:{{student.sex}}</h3>
        <h3>朋友</h3>
        <ul>
            <li v-for="(fr,index) in student.friends" :key="index">姓名:{{fr.name}} -----
                年龄:{{fr.age}}
            </li>
        </ul>

        <h3>爱好</h3>
        <ul>
            <li v-for="(h,index) in student.hobby" :key="index">{{h}}</li>
        </ul>
    </div>
    <script>
        // 实现后添加的数据也能有响应式的功能
        const vm = new Vue({
            el: '#root',
            data: {
                name: 'Vue',
                address: '北京',
                student: {
                    name: '张三',
                    age: 18,
                    hobby: ['学习', '喝酒', '烫头'],
                    friends: [
                        { name: '李四', age: 32 },
                        { name: '王五', age: 29 }
                    ]
                }
            },
            methods: {
                addSex() {
                    // 方法1:
                    // vm.$set(vm.student, 'sex', '男')

                    // 方法2:
                    Vue.set(this.student, 'sex', '男')
                },
                updateSex() {
                    this.student.sex = '女'
                },
                addFriend() {
                    this.student.friends.unshift({ name: '赵六', age: 30 })
                },
                updatefirstF() {
                    this.student.friends[0].name = '小章'
                },
                addHobby() {
                    this.student.hobby.unshift('看片')
                },
                updatefirstHobby() {
                    this.student.hobby.splice(0, 1, '吃饭')
                    // Vue.set(this.student.hobby, 0, '吃饭')
                }

            },
        })
    </script>
</body>

</html>

总结: 


2 收集表单数据

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>收集表单数据</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <form action="" @submit.prevent="submit">
            <!-- 也可以直接放入label标签中 -->
            <!-- <label>密码:
                <input type="password">
            </label> -->

            <!-- 修饰符  trim, number, lazy -->
            <!-- v-model.trim  去掉前后空格 -->
            <label for="userName">账号:</label>
            <input type="text" id="userName" v-model.trim="userInfo.account"><br>
            <label for="passWord">密码:</label>
            <input type="password" id="passWord" v-model.trim="userInfo.password"><br>

            性别:
            <input type="radio" name="sex" checked v-model="userInfo.sex" value="男">男
            <input type="radio" name="sex" v-model="userInfo.sex" value="女">女<br>

            年龄:
            <input type="number" v-model.number="userInfo.age"><br>
            <!-- v-model.number 将写的内容收集成数字类型 -->

            爱好:
            学习<input type="checkbox" name="" v-model="userInfo.hobby" value="学习">
            吃饭<input type="checkbox" name="" v-model="userInfo.hobby" value="吃饭">
            睡觉<input type="checkbox" name="" v-model="userInfo.hobby" value="睡觉"><br>

            所属校区:
            <select v-model="userInfo.city">
                <option value="">请选择</option>
                <option value="bj">北京</option>
                <option value="nj">南京</option>
                <option value="sh">上海</option>
                <option value="sz">苏州</option>
            </select>
            <br><br>

            其它信息:<br>
            <!-- 不希望实时收集  v-model.lazy -->
            <textarea name="" id="" cols="30" rows="10" v-model.lazy="userInfo.other">
            </textarea>
            <br><br>

            <input type="checkbox" name="" id="" v-model="userInfo.agreement">
            阅读并接受用户协议<a href="http://www.baidu.com">用户协议</a>
            <br><br><br>

            <button>提交</button>

        </form>
    </div>
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                userInfo: {
                    account: '',
                    password: '',
                    sex: '',
                    hobby: [],
                    city: '',
                    other: '',
                    agreement: '',
                    age: ''
                }

            },
            methods: {
                submit() {
                    console.log(JSON.stringify(this.userInfo))
                }
            },
        })
    </script>
</body>

</html>

总结:


3 过滤器

【代码】

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>过滤器</title>
    <script src="../js/vue.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.11.9/dayjs.min.js"></script>
</head>

<body>
    <div id="root">
        <h2>显示格式化后的当前时间</h2>
        <!-- 1. 计算属性实现 -->
        <h3>{{forTime}}</h3>

        <!-- 2. methods实现 -->
        <h3>{{getTime()}}</h3>

        <!-- 3.过滤器实现 -->
        <h3>{{time | formatTime}}</h3>

        <!-- 过滤器传参 -->
        <h3>{{time | formatTime('YYYY-MM-DD')}}</h3>

        <!-- 截取 多个过滤器的串联-->
        <h3>{{time | formatTime('YYYY-MM-DD') | mySlice}}</h3>

    </div>
    <script>
        // 配置全局的过滤器
        Vue.filter('mySlice', function (value) {
            return value.slice(0, 4)
        })
        

        const vm = new Vue({
            el: '#root',
            data: {
                time: 1707209007850
            },
            computed: {
                forTime() {
                    return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')
                }
            },
            methods: {
                getTime() {
                    return dayjs(this.time).format('YYYY-MM-DD HH:mm:ss')
                }
            },

            // 局部过滤器
            filters: {
                formatTime(time, str = 'YYYY-MM-DD HH:mm:ss') {

                    return dayjs(time).format(str)
                },
                mySlice(value) {
                    return value.slice(0, 4)
                }
            }
        })
    </script>
</body>

</html>

总结:

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小蟹呀^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值