Vue学习(第三天)
Vue学习(第三天)
一、高阶函数的使用
1.1 filter
filter中的回调函数有一个要求,必须返回boolean类型的值,当返回true时,将当前的值加入到结果中
nums: [1, 2, 3, 4, 5, 6, 7, 8, 9];
//返回nums中数值大于5的元素集合
let result = this.nums.filter(function(n) {return n > 5;
});
1.2 map
对数组中的每个值都进行操作
对result数组中的每个元素值乘以2
let newResult = result.map(function(n) {return n * 2
})
1.3 reduce
可做求和等运算
//求和运算
//function(preValue, currentValue) 回调函数 preValue:前一个结果 currentValue当前值
//初始结果
//对result数组中的元素进行求和运算
let sum = result.reduce(function(preValue, currentValue) {return preValue + currentValue;
}, 0);
1.4 实例
从array数组中筛选中大于5的元素,并且对这些元素值扩大2倍,计算出他们的和
1.4.1 写法一
return this.array.filter(function(n) {return n >= 5;
}).map(function(n) {return n * 2;
}).reduce(function(preValue, currentValue) {return preValue + currentValue;
}, 0);
1.4.2 写法二
this.nums.filter(n => n >= 5).map(n => n * 2).reduce((preValue, currentValue) => preValue + currentValue,1);
补充:filter不会改变原数据,但sort会改变原数据,如下面这样
let arr = [1, 6, 5, 2, 7, 8, 9, 10];
arr.sort((a, b) => {return a - b;//重小到大//return b - a;//重大到小
})
二、v-model的使用
2.1 快速入门
v-model可以实现双向绑定
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Document</title>
</head><body><div id="app"><h2>{{message}}</h2><input type="text" v-model="message"></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
</body></html>
2.2 实现原理
<div id="app"><input type="text" v-text="message"><h2 v-text="message"></h2><!-- <input type="text" :value="message" @input="valueChange"> --><input type="text" :value="message" @input="message = $event.target.value"></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'},methods: {valueChange(event){this.message = event.target.value;}}})</script>
2.3 结合radio
<div id="app"><!-- <label for="male"><input type="radio" id="male" name="gender" value="男" v-model="gender">男</label><label for="female"><input type="radio" id="female" name="gender" value="女" v-model="gender">女</label> --><!-- v-model绑定后的元素可省略name属性 --><label for="male"><input type="radio" id="male" value="male" v-model="gender">男</label><label for="female"><input type="radio" id="female" value="female" v-model="gender">女</label><hr><h2>{{gender}}</h2></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {gender: 'male',}})</script>
2.4 结合checkbox
<div id="app"><!-- 单选复选框 --><div><input type="checkbox" v-model='licences'>同意协议<button :disabled="!licences">下一步</button><h2>{{licences}}</h2></div><hr><!-- 多选复选框 --><div><input type="checkbox" value="篮球" v-model='hobbies'>篮球<input type="checkbox" value="乒乓球" v-model='hobbies'>乒乓球<input type="checkbox" value="羽毛球" v-model='hobbies'>羽毛球<input type="checkbox" value="足球" v-model='hobbies'>足球<input type="checkbox" value="街舞" v-model='hobbies'>街舞</div><h2>{{hobbies}}</h2></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!',hobbies: [],licences: false,}})</script>
2.5 结合select
<div id="app"><div><select v-model='fruit'><option value="apple">苹果</option><option value="pear">梨</option><option value="grape">葡萄</option><option value="banana">香蕉</option></select><h2>{{fruit}}</h2></div><hr><div><!-- 多选框 --><select v-model='fruit' multiple><option value="apple">苹果</option><option value="pear">梨</option><option value="grape">葡萄</option><option value="banana">香蕉</option></select><h2>{{fruit}}</h2></div></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!',fruit: 'banana',}})</script>
2.6 input中的值绑定
<div id="app"><!-- <input type="checkbox" v-for='hobby in hobbies'>{{hobby}} --><label v-for='hobby in hobbies' :for="hobby"><input type="checkbox" :id="hobby" :value="hobby" v-model='result'>{{hobby}}</label><h2>{{result}}</h2></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {hobbies: ['篮球', '乒乓球', '羽毛球', '足球', '街舞','高尔夫球'],result: [],}})
</script>
2.7 v-model的修饰符
2.7.1 懒加载lazy
输入后当鼠标离焦后或按回车后才更新变量信息
<div><input type="text" v-model.lazy='message'><h3>{{message}}</h3>
</div>
2.7.2 数字类型number
不必进行类型的转化
<div><input type="number" v-model.number='number'><h2>{{number}} - {{typeof number}}</h2>
</div>
2.7.3 截取两端字符串trim
截取字符串两端的空白字符
<div><input type="text" v-model.trim='name'><h2>{{name}}</h2>
</div>
三、组件化开发
3.1组件化的基本使用
<!-- 组件必须挂载在某个Vue实例下,否则它不会生效 --><my-cpn></my-cpn><hr><div id="app"><my-cpn></my-cpn></div><script src="../js/vue.js"></script><script>//创建组件构造器对象const component = Vue.extend({//自定义组件的模板template: `<div><h2>我是标题</h2><p>我是内容,哈哈哈</p><p>我是内容,呵呵呵</p></div>`});//2.注册组件Vue.component('my-cpn', component);const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
3.2 全局组件和局部组件
<div id="app"><!-- html不区分大小写 --><my-Component></my-Component></div><hr><div id="other"><my-component></my-component><!-- 等价于 --><!-- <my-component></my-component> --></div><script src="../js/vue.js"></script><script>// 创建组件构造器const component = Vue.extend({template: `<div><h2>这是一个标题</h2><p>这是内容</p></div>`});//全局组件// Vue.component('my-component', component);const app = new Vue({el: '#app',components: {myComponent: component,//true// my-Component: component,//false}})const other = new Vue({el: '#other',components: {myComponent: component}});</script>
3.3 父组件与子组件
const component1 = Vue.extend({template: `<div><h1>这是标题1</h1><p>这是内容,呵呵呵</p></div>`});const component2 = Vue.extend({template: `<div><h1>这是标题2</h1><my-component></my-component><p>这是内容,呵呵呵</p></div>`,components: {myComponent: component1}});const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: component2,}})</script>
3.4 组件的语法糖写法
<div id="app"><my-component></my-component></div><script src="../js/vue.js"></script><script>//全局组件的注册Vue.component('my-component',{template: `<div><h1>this is a title</h1><p>this is a passage</p></div>`});const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: {template: `<div><h1>this is a Title</h1><p>this is a Passage</p></div>`}}})</script>
3.5 组件模板的分离写法
<div id="app"><my-component></my-component></div><script src="../js/vue.js"></script><!-- 方式一: --><!-- <script type="text/x-template" id="myTemplate"><div><h1>this is a title</h1><p>this is a passgae</p></div></script> --><!-- 方式二: --><template id="myTemplate"><div><h1>This is a title</h1><p>This is a passgae</p></div></template><script>Vue.component('myComponent', {template:'#myTemplate'});const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
3.6 组件中的数据为何要函数返回
<div id="app"><my-component></my-component><hr><my-component></my-component><hr><my-component></my-component></div><template id="myTemplate"><div><h1>当前计数:{{counter}}</h1><button @click='add'>+</button><button @click='sub'>-</button></div></template><script src="../js/vue.js"></script><script>// 组件内部是不能访问Vue实例中的数据的 Vue.component('myComponent', {template: '#myTemplate',data() {// 变量不共享return {counter: 0,}},methods: {add() {this.counter++;},sub() {this.counter--;}}});const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
3.7 组件通信-父组件向子组件传递数组
<div id="app"><my-component :cmovies='movies'></my-component></div><template id="myTemplate"><!-- template中:必须包含在一个div内 --><div><h1>{{message}}</h1><h1>{{cmovies}}</h1></div></template><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {movies: ['海王', '胖子行动队', '小兵张嘎', '生化危机', '速度与激情']},components: {myComponent: {template: '#myTemplate',data() {return {message: '你好!~'}},//数组// props: ['cmovies']//对象props: {//1.类型限制// cmovies:Array,//2.提供一些默认值cmovies: {type: Array,//类型是对象或者数组时,默认值必须是一个函数// default: ['a', 'b', 'c'],、default () {return []},// 必须传该值required: true}}}}})</script>
3.8 html中驼峰标识的坑
<div id="app"><my-component :my-first-message='message'></my-component></div><template id="myTemplate"><div><h1>{{myFirstMessage}}</h1></div></template><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: {template: '#myTemplate',data() {return {};},props: {myFirstMessage: {type: String,default () {return;},required: true}}}}})</script>
3.9 组件通信-子向父传递信息
<div id="app"><my-component v-on:item-click='insBtnClick'></my-component></div><template id="myTemplate"><div><button v-for='item in categories' v-on:click='tmpBtnClick(item)'>{{item.value}}</button></div></template><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: {template: '#myTemplate',data: function() {return {categories: [{ name: 'a', value: '数码相机' },{ name: 'b', value: '家用电器' },{ name: 'c', value: '电脑办公' },{ name: 'd', value: '热门推荐' }]}},methods: {tmpBtnClick: function(item) {this.$emit('item-click', item);}}}},methods:{insBtnClick(item){console.log(item);}}})</script>
回顾
- Vue学习(第三天)
- 一、高阶函数的使用
- 1.1 filter
- 1.2 map
- 1.3 reduce
- 1.4 实例
- 1.4.1 写法一
- 1.4.2 写法二
- 二、v-model的使用
- 2.1 快速入门
- 2.2 实现原理
- 2.3 结合radio
- 2.4 结合checkbox
- 2.5 结合select
- 2.6 input中的值绑定
- 2.7 v-model的修饰符
- 2.7.1 懒加载lazy
- 2.7.2 数字类型number
- 2.7.3 截取两端字符串trim
- 三、组件化开发
- 3.1组件化的基本使用
- 3.2 全局组件和局部组件
- 3.3 父组件与子组件
- 3.4 组件的语法糖写法
- 3.5 组件模板的分离写法
- 3.6 组件中的数据为何要函数返回
- 3.7 组件通信-父组件向子组件传递数组
- 3.8 html中驼峰标识的坑
- 3.9 组件通信-子向父传递信息
Vue学习(第三天)
Vue学习(第三天)
一、高阶函数的使用
1.1 filter
filter中的回调函数有一个要求,必须返回boolean类型的值,当返回true时,将当前的值加入到结果中
nums: [1, 2, 3, 4, 5, 6, 7, 8, 9];
//返回nums中数值大于5的元素集合
let result = this.nums.filter(function(n) {return n > 5;
});
1.2 map
对数组中的每个值都进行操作
对result数组中的每个元素值乘以2
let newResult = result.map(function(n) {return n * 2
})
1.3 reduce
可做求和等运算
//求和运算
//function(preValue, currentValue) 回调函数 preValue:前一个结果 currentValue当前值
//初始结果
//对result数组中的元素进行求和运算
let sum = result.reduce(function(preValue, currentValue) {return preValue + currentValue;
}, 0);
1.4 实例
从array数组中筛选中大于5的元素,并且对这些元素值扩大2倍,计算出他们的和
1.4.1 写法一
return this.array.filter(function(n) {return n >= 5;
}).map(function(n) {return n * 2;
}).reduce(function(preValue, currentValue) {return preValue + currentValue;
}, 0);
1.4.2 写法二
this.nums.filter(n => n >= 5).map(n => n * 2).reduce((preValue, currentValue) => preValue + currentValue,1);
补充:filter不会改变原数据,但sort会改变原数据,如下面这样
let arr = [1, 6, 5, 2, 7, 8, 9, 10];
arr.sort((a, b) => {return a - b;//重小到大//return b - a;//重大到小
})
二、v-model的使用
2.1 快速入门
v-model可以实现双向绑定
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Document</title>
</head><body><div id="app"><h2>{{message}}</h2><input type="text" v-model="message"></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
</body></html>
2.2 实现原理
<div id="app"><input type="text" v-text="message"><h2 v-text="message"></h2><!-- <input type="text" :value="message" @input="valueChange"> --><input type="text" :value="message" @input="message = $event.target.value"></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'},methods: {valueChange(event){this.message = event.target.value;}}})</script>
2.3 结合radio
<div id="app"><!-- <label for="male"><input type="radio" id="male" name="gender" value="男" v-model="gender">男</label><label for="female"><input type="radio" id="female" name="gender" value="女" v-model="gender">女</label> --><!-- v-model绑定后的元素可省略name属性 --><label for="male"><input type="radio" id="male" value="male" v-model="gender">男</label><label for="female"><input type="radio" id="female" value="female" v-model="gender">女</label><hr><h2>{{gender}}</h2></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {gender: 'male',}})</script>
2.4 结合checkbox
<div id="app"><!-- 单选复选框 --><div><input type="checkbox" v-model='licences'>同意协议<button :disabled="!licences">下一步</button><h2>{{licences}}</h2></div><hr><!-- 多选复选框 --><div><input type="checkbox" value="篮球" v-model='hobbies'>篮球<input type="checkbox" value="乒乓球" v-model='hobbies'>乒乓球<input type="checkbox" value="羽毛球" v-model='hobbies'>羽毛球<input type="checkbox" value="足球" v-model='hobbies'>足球<input type="checkbox" value="街舞" v-model='hobbies'>街舞</div><h2>{{hobbies}}</h2></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!',hobbies: [],licences: false,}})</script>
2.5 结合select
<div id="app"><div><select v-model='fruit'><option value="apple">苹果</option><option value="pear">梨</option><option value="grape">葡萄</option><option value="banana">香蕉</option></select><h2>{{fruit}}</h2></div><hr><div><!-- 多选框 --><select v-model='fruit' multiple><option value="apple">苹果</option><option value="pear">梨</option><option value="grape">葡萄</option><option value="banana">香蕉</option></select><h2>{{fruit}}</h2></div></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!',fruit: 'banana',}})</script>
2.6 input中的值绑定
<div id="app"><!-- <input type="checkbox" v-for='hobby in hobbies'>{{hobby}} --><label v-for='hobby in hobbies' :for="hobby"><input type="checkbox" :id="hobby" :value="hobby" v-model='result'>{{hobby}}</label><h2>{{result}}</h2></div><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {hobbies: ['篮球', '乒乓球', '羽毛球', '足球', '街舞','高尔夫球'],result: [],}})
</script>
2.7 v-model的修饰符
2.7.1 懒加载lazy
输入后当鼠标离焦后或按回车后才更新变量信息
<div><input type="text" v-model.lazy='message'><h3>{{message}}</h3>
</div>
2.7.2 数字类型number
不必进行类型的转化
<div><input type="number" v-model.number='number'><h2>{{number}} - {{typeof number}}</h2>
</div>
2.7.3 截取两端字符串trim
截取字符串两端的空白字符
<div><input type="text" v-model.trim='name'><h2>{{name}}</h2>
</div>
三、组件化开发
3.1组件化的基本使用
<!-- 组件必须挂载在某个Vue实例下,否则它不会生效 --><my-cpn></my-cpn><hr><div id="app"><my-cpn></my-cpn></div><script src="../js/vue.js"></script><script>//创建组件构造器对象const component = Vue.extend({//自定义组件的模板template: `<div><h2>我是标题</h2><p>我是内容,哈哈哈</p><p>我是内容,呵呵呵</p></div>`});//2.注册组件Vue.component('my-cpn', component);const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
3.2 全局组件和局部组件
<div id="app"><!-- html不区分大小写 --><my-Component></my-Component></div><hr><div id="other"><my-component></my-component><!-- 等价于 --><!-- <my-component></my-component> --></div><script src="../js/vue.js"></script><script>// 创建组件构造器const component = Vue.extend({template: `<div><h2>这是一个标题</h2><p>这是内容</p></div>`});//全局组件// Vue.component('my-component', component);const app = new Vue({el: '#app',components: {myComponent: component,//true// my-Component: component,//false}})const other = new Vue({el: '#other',components: {myComponent: component}});</script>
3.3 父组件与子组件
const component1 = Vue.extend({template: `<div><h1>这是标题1</h1><p>这是内容,呵呵呵</p></div>`});const component2 = Vue.extend({template: `<div><h1>这是标题2</h1><my-component></my-component><p>这是内容,呵呵呵</p></div>`,components: {myComponent: component1}});const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: component2,}})</script>
3.4 组件的语法糖写法
<div id="app"><my-component></my-component></div><script src="../js/vue.js"></script><script>//全局组件的注册Vue.component('my-component',{template: `<div><h1>this is a title</h1><p>this is a passage</p></div>`});const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: {template: `<div><h1>this is a Title</h1><p>this is a Passage</p></div>`}}})</script>
3.5 组件模板的分离写法
<div id="app"><my-component></my-component></div><script src="../js/vue.js"></script><!-- 方式一: --><!-- <script type="text/x-template" id="myTemplate"><div><h1>this is a title</h1><p>this is a passgae</p></div></script> --><!-- 方式二: --><template id="myTemplate"><div><h1>This is a title</h1><p>This is a passgae</p></div></template><script>Vue.component('myComponent', {template:'#myTemplate'});const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
3.6 组件中的数据为何要函数返回
<div id="app"><my-component></my-component><hr><my-component></my-component><hr><my-component></my-component></div><template id="myTemplate"><div><h1>当前计数:{{counter}}</h1><button @click='add'>+</button><button @click='sub'>-</button></div></template><script src="../js/vue.js"></script><script>// 组件内部是不能访问Vue实例中的数据的 Vue.component('myComponent', {template: '#myTemplate',data() {// 变量不共享return {counter: 0,}},methods: {add() {this.counter++;},sub() {this.counter--;}}});const app = new Vue({el: '#app',data: {message: '你好呀!'}})</script>
3.7 组件通信-父组件向子组件传递数组
<div id="app"><my-component :cmovies='movies'></my-component></div><template id="myTemplate"><!-- template中:必须包含在一个div内 --><div><h1>{{message}}</h1><h1>{{cmovies}}</h1></div></template><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {movies: ['海王', '胖子行动队', '小兵张嘎', '生化危机', '速度与激情']},components: {myComponent: {template: '#myTemplate',data() {return {message: '你好!~'}},//数组// props: ['cmovies']//对象props: {//1.类型限制// cmovies:Array,//2.提供一些默认值cmovies: {type: Array,//类型是对象或者数组时,默认值必须是一个函数// default: ['a', 'b', 'c'],、default () {return []},// 必须传该值required: true}}}}})</script>
3.8 html中驼峰标识的坑
<div id="app"><my-component :my-first-message='message'></my-component></div><template id="myTemplate"><div><h1>{{myFirstMessage}}</h1></div></template><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: {template: '#myTemplate',data() {return {};},props: {myFirstMessage: {type: String,default () {return;},required: true}}}}})</script>
3.9 组件通信-子向父传递信息
<div id="app"><my-component v-on:item-click='insBtnClick'></my-component></div><template id="myTemplate"><div><button v-for='item in categories' v-on:click='tmpBtnClick(item)'>{{item.value}}</button></div></template><script src="../js/vue.js"></script><script>const app = new Vue({el: '#app',data: {message: '你好呀!'},components: {myComponent: {template: '#myTemplate',data: function() {return {categories: [{ name: 'a', value: '数码相机' },{ name: 'b', value: '家用电器' },{ name: 'c', value: '电脑办公' },{ name: 'd', value: '热门推荐' }]}},methods: {tmpBtnClick: function(item) {this.$emit('item-click', item);}}}},methods:{insBtnClick(item){console.log(item);}}})</script>
回顾
- Vue学习(第三天)
- 一、高阶函数的使用
- 1.1 filter
- 1.2 map
- 1.3 reduce
- 1.4 实例
- 1.4.1 写法一
- 1.4.2 写法二
- 二、v-model的使用
- 2.1 快速入门
- 2.2 实现原理
- 2.3 结合radio
- 2.4 结合checkbox
- 2.5 结合select
- 2.6 input中的值绑定
- 2.7 v-model的修饰符
- 2.7.1 懒加载lazy
- 2.7.2 数字类型number
- 2.7.3 截取两端字符串trim
- 三、组件化开发
- 3.1组件化的基本使用
- 3.2 全局组件和局部组件
- 3.3 父组件与子组件
- 3.4 组件的语法糖写法
- 3.5 组件模板的分离写法
- 3.6 组件中的数据为何要函数返回
- 3.7 组件通信-父组件向子组件传递数组
- 3.8 html中驼峰标识的坑
- 3.9 组件通信-子向父传递信息
发布评论