vue1
vue是用来开发网页的,代表标签是div,img;uniapp是用来开发手机端的,代表标签是view,image
安装:
快捷键生成模板,若有别的简写都可以在这里快速生成:
{ "Print to console": { "prefix": "vue", "body": [ "<template>", " <div>", "", " </div>", "</template>", "", "<script>", "export default {", " name:", "}", "", "</script>", "", "<style scoped>", "", "</style>", "" ], "description": "Log output to console" } }
展示变量:
控制台测试:
遍历数组:
点击按钮计数:
new Vue里面的this都是这个Vue实例,不像原生js
此处要添加事件,事件的具体处理函数可以写到标签里面,最好写到标签外面:
也能写出去,然后会自动利用代理把obj的数据写到app对象中:
可以用2种方式定义el,让它选中元素:
方法一般写到类里面,和对象挂钩,而函数在写到外面,定义成全局的
div#q:创建id=q的div。
mustache:{{}}
指令v-once:第一次展示的时候变量能用,后来改变量的值就不会再改变了:
v-html可以解析html标签:
v-text:会覆盖内容:
v-pre:原封不动的输出。不再解析:
v-cloak:当有这个属性时,v-cloak所在的div因为样式display就不会显示出来了,而当vue解析把v-cloak去掉后,就能显示内容了
v-bind,写到属性前面可以识别属性中的变量,还可以简写:
只有当用vue的时候才能这种格式,换成css则不行
还能单独用函数得到返回值:
另一种表达:数组语法
如果不需要把50px当成变量解析,则‘’:
如果要解析变量:
也可以利用函数得到拼接结果:
使用计算属性computed也可以实现,在调用方法的时候不用像methods那样加(),当要表达某种属性而非动作的时候最好用计算属性,因为在computed中,每个属性里面都包括get和set方法,一般情况下不用set,所以只保留get,因此get也可以省去,但其实意义上就是对属性的get和set。如果还有个div也调用了,那么这个函数只会把相同的结果返回,不会再调用,除非值不同了
computed定义的都是属性(计算属性),通过return来决定属性的值,通过this.fullName可以访问属性:
利用计算属性计算总价格:
计算属性的set和get:页面加载时会调用get属性显示变量。由于计算属性一般不写set方法,所以可以认为他是只读属性
下面非注释地方可以不写set,如果写了set,可以在控制台测试,设置的新值会改变变量的值,那么div那个地方的显示也变了:
作用域 :
ES5的解决思路是使用闭包,ES6是使用let,产生多个作用域,每个作用域有自己的i
闭包解决,因为外面的(i)值传到了里面的(function (i)中,所以外面的i不会对里面的i造成影响:
对象的增强写法,下面那一端就等价于注释部分,变量名作为key,变量值作为属性:
函数的增强写法:
v-on事件监听:
使用语法糖:
如果需要事件对象:
假如还需要其他参数:
.stop可以阻止事件冒泡:
.prevent阻止默认事件发生:
keyup监听键盘按下去然后抬起的事件:
如果只想监听enter键:
.once只允许事件发生一次,不理睬后面发送的事件,下面这个就是只能点击1次:
条件判断,如果为v-if为false,则不会显示标签内部的东西:
给if加个else,v-else对应的标签紧挨着if对应的标签下面:
加个else if:
但是通过计算属性来实现更好:
用户登录案例:
注意,当点击切换按钮之后会,虚拟dom发现有2个input,再查看它们的key值是否相同,如果相同或没有设置,则不会新创建input,但会对比2个input,把不相同的地方替换掉,但是文本框的值还会留着(value=.....),如果想让它创建新的input,则修改key:
v-show的效果类似于v-if,不同的是它是通过操纵display的:
遍历数组:
遍历对象:
for总结:
1.假定books是数组:
book是数组元素,index是索引,index可以省略
2.假定book是对象:
value是属性值,key是属性名,index是属性的索引值,后2个可以省略:
优化:如果给每个item绑定一个独一无二的key,那么进行插入操作就会以移位的方式,而不是一一往后复制,性能会提升:
数组.splice(2,2):从索引为2的地方开始往后删掉2个元素
数组.splice(2,0,'Q'):在索引为2的位置(删除0个元素)插入元素Q;
数组,splice(2,3,'a','b','c'):从索引为2开始,替换三个元素为abc
数组方法:
以上的数组方法都是响应式的,vue会一直监听着,一旦元素发生了改变页面也就改变了,而通过arr[0]='a'这种方法是不会有反应的。
下面也是响应式的:
作业:
展示四个li,初始时第一个li是红色,之后点击哪里li哪个li就变红色:
案例:
添加filter属性可以把数据进行格式转化,比如此处可把85转换成¥85.00格式
js中:
html中:
关键代码:
js的:
html:
补充:另外一种方式计算总价格(非注释):
第三种方式:
高阶函数filter:
有多少元素就会遍历多少次,filter将一个函数作为参数传入,n代表每个元素,当返回值为true,则把参数n放到新数组中,否则不管。
下面为将<100的数字拿出来放到新数组中:
map也是会遍历所有元素,把每次return返回的值收集到一起
下面是:对数组的每个元素*2:
reduce:遍历所有元素:
由于第二个参数是0,所以第一个参数中的preValue就是0,n是数组中第1个元素
第二次遍历时,preValue是第一次return后的结果,而n是数组中第二个元素
第三次遍历时,preValue是第二次return的结果。下面为计算数组中的所有元素的和:
3个函数结合使用:实现将所有<100的元素*2,最后再将它们累加:
等价于:
利用高级函数计算上面总价格的新方式:
v-model:
双向绑定表单内的值和属性:改变了下面的message,上面的input也会变,反之也成立。此时也不用写value了。也能给textare
实现原理,input是只要文本框发生变化就会触发(刚按下键就会触发):
v-model和radio的结合:当都注册了v-model之后,就不用给radio写name属性了:
这里加上label之后点击汉子就能选中单选框了:
v-model和checkbox单选框结合:
和多选框结合:
和select单选结合:
和select多洗:
值绑定,为了不把value写死:
修饰符,.lazy可以实现当用户不想实时通过model更新时,只想在文本框失去焦点或者输入完成后敲击回车,才会发生赋值操作:
trim可以先把输入进去的字符串去除空格:
组件化,一次注册,多次使用:
注意最后使用组件的时候要放到vue管理的id=app的div中
以上注册组件的方式是全局注册,当有另外一个const app2=new Vue({})时,也能在app2所管理的地方使用组件,以下为注册局部组件,这样app2就不能使用组件了:
父子组件:
Vue实例是根组件,是别的组件的祖宗,是cpn2的父组件
把cpn1组件注册到cpn2中,这样cnp2中就可以使用cpn1的标签,cpn2是父组件,cpn1是子组件:
语法糖一步注册全局组件:
语法糖注册局部组件:
将模板写外面去,通过属性中的id绑定到一起:
抽离模板的另一种方法(常用),注意要在template标签里面用一个大标签div或span等包住,这样能有样式,模板就是一种定义,定义好了外面想用多少就用多少:
组件开发3个计数器,由于data函数每调用一次都会返回不同的对象,所以这三个组件之间的数据是不会相互影响的: