列表数据收集、列表过滤及排序、过滤器filters
一、列表渲染:v-for \ :key的关键作用
< body>
< div id = " app" >
< button type = " button" @click.once = " addliu($event)" > 添加一个老刘</ button>
< ul>
< li v-for = " (p,index) in persons" :key = " p.id" > {{p.name}}-----{{p.age}}
< input type = " " name = " msg" id = " " placeholder = " " />
</ li>
</ ul>
</ div>
< script type = " text/javascript" >
const vm = new Vue ( {
data : function ( ) {
return {
persons: [
{ id: '001' , name: '张三' , age: 18 } ,
{ id: '002' , name: '李四' , age: 20 } ,
{ id: '003' , name: '王五' , age: 30 }
]
}
} ,
methods: {
addliu : function ( ) {
const p = { id: '004' , name: '葛六' , age: 40 }
this . persons. unshift ( p)
}
}
} )
vm. $mount ( '#app' )
</ script>
</ body>
二、form过滤
< body>
< script type = " text/javascript" >
const vm = new Vue ( {
data : function ( ) {
return {
keyword: "" ,
persons: [
{ id: '0001' , name: '马冬梅' , age: 18 , sex: '女' } ,
{ id: '0002' , name: '周冬雨' , age: 22 , sex: '女' } ,
{ id: '0003' , name: '周杰伦' , age: 44 , sex: '男' } ,
{ id: '0004' , name: '温兆伦' , age: 44 , sex: '男' }
]
}
} ,
computed: {
filpersons ( ) {
return this . persons. filter ( ( p ) => {
return p. name. indexOf ( this . keyword) !== - 1
} )
}
}
} )
vm. $mount ( '#app' )
</ script>
</ body>
三、form排序
< body>
< div id = " app" >
< input type = " text" v-model = " keyword" placeholder = " 输入关键字" />
< button type = " button" @click = " sorttype =2" > 年龄升序</ button>
< button type = " button" @click = " sorttype =1 " > 年龄降序</ button>
< button type = " button" @click = " sorttype =0" > 原</ button>
< ul>
< li v-for = " p in pers" :key = " p.id" > {{p.name}}-------{{p.age}}---{{p.sex}}</ li>
</ ul>
</ div>
< script type = " text/javascript" >
const vm = new Vue ( {
data : function ( ) {
return {
keyword: "" ,
sorttype: 0 ,
persons: [
{ id: '0001' , name: '马冬梅' , age: 18 , sex: '女' } ,
{ id: '0002' , name: '周冬雨' , age: 22 , sex: '女' } ,
{ id: '0003' , name: '周杰伦' , age: 19 , sex: '男' } ,
{ id: '0004' , name: '温兆伦' , age: 44 , sex: '男' }
]
}
} ,
computed: {
pers ( ) {
const arr = this . persons. filter ( ( p ) => {
return p. name. indexOf ( this . keyword) !== - 1
} )
if ( this . sorttype) {
arr. sort ( ( p1, p2 ) => {
return this . sorttype === 1 ? p2. age- p1. age : p1. age- p2. age
} )
}
return arr
}
}
} )
vm. $mount ( '#app' )
</ script>
</ body>
四、form收集数据:v-model的三大修饰符
< body>
< div id = " app" >
< form @submit.prevent = " submit1" >
< label for = " demo" > 账号:</ label>
< input type = " text" id = " demo" v-model.trim = " account" /> < br> < br>
< label for = " demo1" > 密码:</ label>
< input type = " password" id = " demo1" v-model = " pwd" /> < br> < br>
< label for = " demo2" > 性别:</ label>
男< input type = " radio" name = " sex" v-model = " sex" value = " 1" />
女< input type = " radio" name = " sex" v-model = " sex" value = " 0" /> < br> < br>
< label for = " demo2" > 年龄:</ label>
< input type = " number" v-model.number = " age" /> < br> < br>
< label for = " demo3" > 爱好:</ label>
学习< input type = " checkbox" v-model = ' hobby' value = " 学习" />
游戏< input type = " checkbox" v-model = ' hobby' value = " 游戏" />
旅游< input type = " checkbox" v-model = ' hobby' value = " 旅游" /> < br> < br>
< label for = " demo4" > 所属校区:</ label>
< select v-model = " city" >
< option value = " " > 请选择校区</ option>
< option value = " shanghai" > 上海</ option>
< option value = " beijing" > 北京</ option>
< option value = " chengdu" > 成都</ option>
< option value = " wuhan" > 武汉</ option>
</ select> < br> < br>
< label for = " demo4" > 其他描述:</ label> < br> < br>
< textarea v-model.lazy = " others" > </ textarea> < br> < br>
< input type = " checkbox" v-model = " istrue" /> 阅读并接受< a href = " http://www.baidu.com" target = " _blank" > 《用户协议》</ a>
< button type = " submit" > 提交</ button>
</ form>
</ div>
< script type = " text/javascript" >
const vm = new Vue ( {
data : function ( ) {
return {
account: '' ,
pwd: '' ,
age: '' ,
sex: '0' ,
hobby: [ ] ,
city: '' ,
others: '' ,
istrue: ''
}
} ,
methods: {
submit1 : function ( e ) {
console. log ( JSON . stringify ( this . _data) )
console. log ( this . _data)
}
}
} )
vm. $mount ( "#app" )
</ script>
</ body>
五、vm中的filters关键字:过滤器
< body>
< div id = " app" >
< h2> 显示格式化</ h2>
< h3> 现在是:{{fmttime}}</ h3>
< h3> 现在是:{{getfmttime()}}</ h3>
< h3> 现在是:{{time | timeFormater}}</ h3>
< h3> 现在是:{{time | timeFormater('YYYY-MM-DD')}}</ h3>
</ div>
< script type = " text/javascript" >
const vm = new Vue ( {
data : function ( ) {
return {
time: Date. now ( )
}
} ,
computed: {
fmttime : function ( ) {
return dayjs ( this . time) . format ( 'YYYY-MM-DD HH:mm:ss' )
}
} ,
methods: {
getfmttime : function ( ) {
return dayjs ( this . time) . format ( 'YYYY-MM-DD HH:mm:ss' )
}
} ,
filters: {
timeFormater : function ( value, strtype= 'YYYY-MM-DD HH:mm:ss' ) {
return dayjs ( value) . format ( strtype)
}
}
} )
vm. $mount ( '#app' )
</ script>
</ body>