Open JackWong992 opened 6 years ago
学习vue之前你需要具备以下的知识:
安装vue: 1:本地安装,直接下载到本地 2:CDN引入,直接在页面中引入(推荐使用) 安装方法:vuejs.org(英文网站) cn.vuejs.org(中文网站) > learn > api
学习vue之前希望你具备条件:
lesson_1: 写一个helloworld的小例子吧 先写一个index.html的页面,主要用于指向例子: 第一节代码如下:
index.html: `<body> <h1>vue2.0实例</h1> <hr> <ol> <li><a href="./01_helloworld.html">hello world实例</a></li> </ol> </body>
然后开始写我们的demo,代码如下:
<body> <h1>hello world</h1> <hr> <div id="app">{{message}}</div> //message就是显示要包裹的信息 <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !' } }) </script> </body>
这样我们的一个小例子已经完成了,点击index.html中的“helloworld”会跳转至实例中,页面显示‘hello world’
lesson_2: v-if & v-else &v-show v-if & v-else 看起来很熟悉,相当于我们之前见到的选择判断,那v-show是什么?v-show相当于css中的display:none属性。 实例代码:(下文中都是从index.html引入一个链接,不在演示index.html代码)
v-if.html: <body> <h1>v-if & v-else & v-show</h1> <hr> <div id="app"> <div v-if="islogin"> 如果你使用了v-if那么你就可以看到这句话 </div> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { islogin: true } }) </script> </body>
解释:如果v-if的选择判断是正确的,那么会正产显示这句话;如果v-if是false,则不会显示这句话。
v-else实例: <body> <h1>v-if & v-else & v-show</h1> <hr> <div id="app"> <div v-if="islogin"> 如果你使用了v-if那么你就可以看到这句话 </div> <div v-else="notlogin"> 如果你使用了v-else那么你可以看到这句话 </div> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { islogin: false, notlogin: true } }) </script>
解释:如果v-if的显示是正常的,不会显示v-else下面的这句话。同样也就是说,v-else的正常显示必须是在v-if的判断为false的前提下。 v-show和v-if的显示效果类似,这里不做演示。 敲黑板的地方开始了(duang duang duang): v-if & v-show的区别是啥?
lesson_3:v-for实例 显然v-for就是循环的意思,但是这里和js有点不同的地方是:如果你想要在什么地方循环,那么你就在什么地方加入v-for。 具体代码如下:
v-for.html: <h1>v-for</h1> <hr> <div id="app"> <ul> <li v-for="item in items">{{item}}</li> </ul> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { items:[53,27,66,78,12] } }) </script>
解释:所以在v-for循环就实现了,这里我们要循环的是li所以在li加入了v-for。 那么简单的循环实现了,排序在vue中该怎么实现呢?(例如:5,6,4,7 ->4,5,6,7) 如果是在以往的JS我们是这样实现的:
data:{ items:[28,36,15,77,11] }, computed:{ items:function(){ return this.item.sort(); } }
:-1: 注意这种写法在vue中是错误的,error:when renderring root instance; 根命名错误 正确写法:
<h1>v-for</h1> <hr> <div id="app"> <ul> <li v-for="item in sortItems">{{item}}</li> </ul> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { items:[53,27,6,78,12], }, computed: { sortItems: function(){ return this.items.sort(sortNumber); } } }) function sortNumber(a,b){ return a-b; } </script>
//在JS中排序:21,31,4,51;这样的排序出现是正常的,如果想要实现:4,21,31,51.在上文中我封装了一个sortNumber函数,你直接调用就可以了。 字符串数组的循环:
实现效果: jack : 400 pony: 390 alex :410 代码: <ul> <li v-for="student in students"> {{student.name}}-{{student.money}} </li> </ul> js: data:{ students:[ {name:'jack',money:400}, {name:'pony',money:390}, {name:'alex',money:410}, ] }
接下来,我们进行数组对象方法的排序: 效果:pony: 390 jack:400 alex: 410 同样和上面的排序一样,我们需要提前封装一个数组对象方法的函数:
function sortByKey(array , key){ return array.sort(function(a , b){ var x =a[key]; var y = b[key]; return ((x<y) ? -1:((x>y)? :0 )) }) }
排序代码:
html: <ul> <li v-for="student in sortStudents"> {{student.name}}-{{student.money}} </li> </ul> js: data: { students:[ {name:'jack',money:400}, {name:'pony',money:390}, {name:'alex',money:410} ] }, computed: { sortStudents: function(){ return sortByKey(this.students,'money') } }
lesson_4:v-texth输出&v-html输出
v-txml具体代码如下: <div id="app"> 第一种(普通输出): {{message}} <br> 第二种(v-text输出):<span v-text="messages"></span> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !', messages: 'hello world !' } }) </script>
v-text的好处是在于,它是等dom预处理结束后才会进行输出,而一般的{{}}输出,如果你语法出现了错误,显示也是不正常的,但是你用了v-text如果语法错误,直接显示不出来。 v-html:
<div id="app"> 第一种(普通输出): {{message}} <br> //普通的helloworld 字体 第二种(v-html输出):<span v-html="messages"></span> //h1号字体的 helloworld </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !', messages: '<h1>hello world !</h1>' } }) </script>
v-html指令有种预编译的感觉,它输出的代码都是经过编译过的代码,但是这类型的代码在实战的过程中应该慎用,因为会引起不必要的xss攻击风险。
v-on实例:
代码展示: <div id="app"> 本场比赛得分:{{fenshu}} <br> <button v-on:click="jiafen">加分</button> <button @click="jianfen">减分</button> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { fenshu: 0 }, methods:{ jiafen:function(){ this.fenshu++; }, jianfen:function(){ this.fenshu--; } } }) </script>
v-on组件相当于JS中的时间,其中上述代码中的v-on:click的缩写方法是:@click 自定义加分:
<div id="app"> 本次得分:{{count}} <button v-on:click="add">加分</button> <input type="text" v-on:keyup.enter="onEnter" v-model="secondCount"> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { count: 1, secondCount: 1 }, methods:{ add:function(){ this.count++; }, onEnter:function(){ this.count = this.count + parseInt(this.secondCount); } } }) </script>
解释:这是自定义加分的演示,这里要注意的地方是:在js中两个数字相加是默认为字符串相加,需要转换为数字相加,我在这里使用了parseInt。v-model是绑定数据源的意思,在下面的一节中会提到
lesson_6 v-model双向数据绑定:v-model实现的是双向数据,当用户在文本框输入文字的同时,屏幕也在同时输入文本框中的显示内容;其中v-model有几个属性,分别为:.lazy , .number , .trim .lazy 属性:当用户在输入框输入文字的时候不会显示,离开输入框屏幕内容就会正常显示 .number 属性:当用户输入文字的时候不会显示,只有输入数字的情况下会显示,但是如果一字符为开头的也会正常显示。 .trim属性:屏幕显示去除文本输入的前后空格
code: <div id="app"><span v-text="message"></span> <h3>文本输入</h3> v-model:<input type="text" v-model="message"><br> v-model.lazy: <input type="text" v-model.lazy="message"><br> v-model.number:<input type="text" v-model.number="message"><br> v-model.trim:<input type="text" v-model.trim="message"><br> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !' } }) </script>
多选框绑定一个值:
code: <div id="app"> <label> <input type="checkbox" v-model="istrue" > {{istrue}}</label> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !', istrue: true } }) </script>
选中则为true,去掉对号则为false; 多选框绑定数组: 单选框的绑定一个数组:
<label for="istrue"> <input type="checkbox" v-model="array_name" value="huangfl">huangfl </label> <label for="istrue"> <input type="checkbox" v-model="array_name" value="jackwong">jackwong </label> <label for="istrue"> <input type="checkbox" v-model="array_name" value="philonghuynh">philonghuynh </label><br> {{array_name}} </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !', istrue: true, array_name:[] } }) </script>
当点击选框按钮的时候,下面的数组框会显示你选中的信息。 单选框选择性别信息:
<div id="app"> <label > <input type="radio" v-model="sex" value="男"> 男 </labe> <label> <input type="radio" v-model="sex" value="女">女 </label> <br> 你选择的性别是:{{sex}} </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !', istrue: true, array_name:[], sex: '男' //表示默认选框是男 } }) </script>
lesson_7: v-bind 标签元素选择属性:
<div id="app"> <img v-bind:src="imgSrc"> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { imgSrc: 'https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=3116813668,3476052882&fm=173&s=08E273231862B69EFF1500DE0100C091&w=218&h=146&img.JPEG' } }) </script>
对于a标签来说,在href输入一样的地址一样可以链接到。 当然也可以这样写:
css:.classA{color : red;} html:<div v-bind:class="{classA:isok}"> 这行文本用于判断</div> js: data{ className:'classA' isok:true //如果是true显示为红色,false则不显示 }
bind标签属性绑定数组元素:
<div v-bind: class ="[class A,classB]"></div> data:{ classA:'classA', classB:'classB'
bind标签属性绑定三元运算符:
<style type="text/css"> .classA{ color:red; } .classB{ font-size: 50px; } </style> <body> <h1>hello world</h1> <hr> <div id="app"> <img v-bind:src="imgSrc"> <div v-bind:class="isok?classA:classB">你好这个世界</div> <hr> <input type="checkbox" v-model="isok"> <label for="isok">isok={{isok}}</label> </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { classA: 'classA', classB: 'classB', isok: true } }) </script>
当鼠标点击的时候会显示正确,为classA属性,false的情况下为classB属性 当然v-bind也可以对象style,例如:
html: <div v-bind:style='styleObject'>你好,我是小明;如果你绑定了对象属性,那么你会看到这行字会变成红色</div> js: data:{ styleObject:{ color:'red', fontSize: '20px' } }
lesson_8:指令其他部分 v-pre & v-cloak & v-once: v-pre文本原样输出不经过任何编译,相当于html中的pre代码,直接加入到想要不编译的标签中就可以了 v-cloak: 渲染完成以后才会显示相关信息,只要放在想要的标签中加入即可。 v-once:只执行一次,例如上面所提到的双向数据绑定:
<div id="app"> <span v-once>{{message}}</span> <br> <input type="text" v-model="message" > </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'hello world !' } }) </script>
这里的v-once只会执行一次,就是刚刚加载完成时候这一次就会停止。 好了,第一季就到此结束了!
vue入门第一季
学习vue之前你需要具备以下的知识:
大致的了解nodeJs的相关知识
安装vue: 1:本地安装,直接下载到本地 2:CDN引入,直接在页面中引入(推荐使用) 安装方法:vuejs.org(英文网站) cn.vuejs.org(中文网站) > learn > api
学习vue之前希望你具备条件:
本地服务器,例如:http-server
lesson_1: 写一个helloworld的小例子吧 先写一个index.html的页面,主要用于指向例子: 第一节代码如下:
然后开始写我们的demo,代码如下:
这样我们的一个小例子已经完成了,点击index.html中的“helloworld”会跳转至实例中,页面显示‘hello world’
lesson_2: v-if & v-else &v-show v-if & v-else 看起来很熟悉,相当于我们之前见到的选择判断,那v-show是什么?v-show相当于css中的display:none属性。 实例代码:(下文中都是从index.html引入一个链接,不在演示index.html代码)
解释:如果v-if的选择判断是正确的,那么会正产显示这句话;如果v-if是false,则不会显示这句话。
解释:如果v-if的显示是正常的,不会显示v-else下面的这句话。同样也就是说,v-else的正常显示必须是在v-if的判断为false的前提下。 v-show和v-if的显示效果类似,这里不做演示。 敲黑板的地方开始了(duang duang duang): v-if & v-show的区别是啥?
v-show:调整css dispaly属性,可以使客户端操作更加流畅。
lesson_3:v-for实例 显然v-for就是循环的意思,但是这里和js有点不同的地方是:如果你想要在什么地方循环,那么你就在什么地方加入v-for。 具体代码如下:
解释:所以在v-for循环就实现了,这里我们要循环的是li所以在li加入了v-for。 那么简单的循环实现了,排序在vue中该怎么实现呢?(例如:5,6,4,7 ->4,5,6,7) 如果是在以往的JS我们是这样实现的:
:-1: 注意这种写法在vue中是错误的,error:when renderring root instance; 根命名错误 正确写法:
//在JS中排序:21,31,4,51;这样的排序出现是正常的,如果想要实现:4,21,31,51.在上文中我封装了一个sortNumber函数,你直接调用就可以了。 字符串数组的循环:
接下来,我们进行数组对象方法的排序: 效果:pony: 390 jack:400 alex: 410 同样和上面的排序一样,我们需要提前封装一个数组对象方法的函数:
排序代码:
lesson_4:v-texth输出&v-html输出
v-text的好处是在于,它是等dom预处理结束后才会进行输出,而一般的{{}}输出,如果你语法出现了错误,显示也是不正常的,但是你用了v-text如果语法错误,直接显示不出来。 v-html:
v-html指令有种预编译的感觉,它输出的代码都是经过编译过的代码,但是这类型的代码在实战的过程中应该慎用,因为会引起不必要的xss攻击风险。
v-on实例:
v-on组件相当于JS中的时间,其中上述代码中的v-on:click的缩写方法是:@click 自定义加分:
解释:这是自定义加分的演示,这里要注意的地方是:在js中两个数字相加是默认为字符串相加,需要转换为数字相加,我在这里使用了parseInt。v-model是绑定数据源的意思,在下面的一节中会提到
lesson_6 v-model双向数据绑定:v-model实现的是双向数据,当用户在文本框输入文字的同时,屏幕也在同时输入文本框中的显示内容;其中v-model有几个属性,分别为:.lazy , .number , .trim .lazy 属性:当用户在输入框输入文字的时候不会显示,离开输入框屏幕内容就会正常显示 .number 属性:当用户输入文字的时候不会显示,只有输入数字的情况下会显示,但是如果一字符为开头的也会正常显示。 .trim属性:屏幕显示去除文本输入的前后空格
多选框绑定一个值:
选中则为true,去掉对号则为false; 多选框绑定数组: 单选框的绑定一个数组:
当点击选框按钮的时候,下面的数组框会显示你选中的信息。 单选框选择性别信息:
lesson_7: v-bind 标签元素选择属性:
对于a标签来说,在href输入一样的地址一样可以链接到。 当然也可以这样写:
bind标签属性绑定数组元素:
bind标签属性绑定三元运算符:
当鼠标点击的时候会显示正确,为classA属性,false的情况下为classB属性 当然v-bind也可以对象style,例如:
lesson_8:指令其他部分 v-pre & v-cloak & v-once: v-pre文本原样输出不经过任何编译,相当于html中的pre代码,直接加入到想要不编译的标签中就可以了 v-cloak: 渲染完成以后才会显示相关信息,只要放在想要的标签中加入即可。 v-once:只执行一次,例如上面所提到的双向数据绑定:
这里的v-once只会执行一次,就是刚刚加载完成时候这一次就会停止。 好了,第一季就到此结束了!