1. 收集表单数据
收集表单数据:
若:<input type="text"/>,则v-model收集的是value值,用户输入的就是value值。
若:<input type="radio"/>,则v-model收集的是value值,且要给标签配置value值。
若: <input type="checkbox" />
-
没有配置input的value属性,那么收集的就是checked(勾选or未勾选,是布尔值)
-
配置input的value属性:
(1) v-model的初始值是非数组,那么收集的就是checked(勾选or未勾选,是布尔值)
(2) v-model的初始值是数组,那么收集的的就是value组成的数组
备注: v-model的三个修饰符:
lazy: 失去焦点再收集数据
number: 输入字符串转为有效的数字
trim: 输入首尾空格过滤
<body>
<div id="root">
<form @submit.prevent="sendUserInfo">
账号:<input type="text" name="" v-model.trim="userInfo.username"><br /><br />
密码:<input type="password" v-model="userInfo.password"><br /><br />
年龄:<input type="number" v-model.number="userInfo.age"><br /><br />
性别:
男 <input type="radio" name="sex" v-model="userInfo.sex" value="male">
女 <input type="radio" name="sex" v-model="userInfo.sex" value="female"><br /><br />
爱好:
学习 <input type="checkbox" v-model="userInfo.hobby" value="study">
打游戏 <input type="checkbox" v-model="userInfo.hobby" value="game">
吃饭 <input type="checkbox" v-model="userInfo.hobby" value="eat"><br /><br />
所属校区
<select v-model="userInfo.city">
<option value="">请选择校区</option>
<option value="beiJing">北京</option>
<option value="shangHai">上海</option>
<option value="shenZhen">深圳</option>
<option value="wuHan">武汉</option>
</select><br /><br />
其它信息:
<textarea v-model.lazy="userInfo.other"></textarea><br /><br />
<input type="checkbox" v-model="userInfo.agree">阅读并接受<a href="www.baidu.com">协议</a><br /><br />
<button>提交</button>
</form>
</div>
</body>
<script>
new Vue({
el: '#root',
data() {
return {
userInfo: {
username: '',
password: '',
age: '',
sex: '',
hobby: [],
city: '',
other: '',
agree: false
}
}
},
methods: {
sendUserInfo() {
console.log(this.userInfo);
alert(提交信息);
}
},
})
</script>
2. 过滤器
定义: 对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)。
语法:
-
注册过滤器:Vue.filter(name,callback)或new Vue{filters:{}}
-
使用过滤器:{{ xxx│过滤器名}}或v-bind:属性=“xxx|过滤器名"
-
备注:
- 过滤器也可以接收额外参数、多个过滤器也可以串联
- 并没有改变原本的数据,是产生新的对应的数据
<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>Document</title>
<script src="js/vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/dayjs/1.10.6/dayjs.min.js"></script>
</head>
<body>
<div id="root">
<h1>显示格式化时间</h1>
<!-- 计算属性实现 -->
<h2>时间:{{fmTime}}</h2>
<!-- methods实现 -->
<h2>时间:{{getFmTime()}}</h2>
<!-- 过滤器实现 -->
<h2>时间:{{dateTime | timeFormater}}</h2>
<!-- 过滤器的传参 -->
<h2>时间:{{dateTime | timeFormater('YYYY-MM-DD')}}</h2>
<!-- 过滤器的串联 -->
<h2>时间:{{dateTime | timeFormater('YYYY-MM-DD') | mySlice}}</h2>
<h2></h2>
</div>
</body>
<script>
//注册全局过滤器
Vue.filter('mySlice2', function (value) {
return value.slice(0, 5);
});
new Vue({
el: '#root',
data() {
return {
dateTime: 1621561377603
}
},
computed: {
fmTime() {
return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
}
},
methods: {
getFmTime() {
return dayjs(this.time).format('YYYY年MM月DD日 HH:mm:ss')
}
},
filters: {
// timeFormater(value) {
// return dayjs(value).format('YYYY年MM月DD日 HH:mm:ss')
// }
timeFormater(value, str = 'YYYY年MM月DD日 HH:mm:ss') {
return dayjs(value).format(str)
},
mySlice(value) {
return value.slice(0, 4)
}
}
})
</script>