vue笔记

1.基本绑定:

   new Vue(

       {

           el:'#elID',

           data:{

               // data obj

           },

           computed:{

               // computed obj

           },

           methods:{

               // methods obj

           },

       }

   );

2.指令:

   前缀为v-

   *v-if, v-for, v-bind, v-on...

   *特性插值会转为v-bind绑定: href='{{url}}' --> v-bind:href='url'

3.数据绑定只接受单个表达式:

   {{number+1}}                                    ok

   {{ok?'yes':'no'}}                                ok

   {{message.split('').reverse().join('')}}        ok

   {{var a=1}}                                        no

   {{if(ok){return message}}}                        no

4.过滤器:

   管道式的写法 --> {{message|capitalize}}

   *可以串联: filterA|filterB

   *可以带参数: filterA 'arg1' arg2

5.修饰符

   前缀为.

   *v-bind:href.literal='a/b/c'

6.缩写

   v-bind:href='url' --> :href='url'

   v-on:click='dosomething' --> @click='dosomething'

7.计算setter

   computed:{

       fullName:{

           get:function(){

               // getter

           }

           set:function(newValue){

               //setter

           }

       }

   }

8.Class与Style绑定

   *变量语法:v-bind:class="{'class-a':isA, 'class-b':isB}"        -->        data:{isA:true, isB:false}

   *对象语法:v-bind:class="classObj"                                -->        data:{classObj:{'class-a':true, 'class-b':false}}

   *数组语法:v-bind:class='[classA, classB]'                        -->        data:{classA:'class-a', classB:'class-b'}

9.条件渲染

   *v-if, v-show, v-else

   *

Yes

No

   *

Yes

No

   *show只是简单的display:none

10.列表渲染

   v-for

   *内置变量:{{$index}}

   *用法:v-for='item in items'

v-for='(index, item) in items'    *数组则是索引,遍历对象则是键

11.数组变动检测

   能触发视图更新的方法:

   *push, pop, shift, unshift, splice, sort, reverse            // 变异方法

   *filter, concat, slice                                        // 替换数组

   *尽可能复用DOM: track-by

       v-for="item in items" track-by="_uid"

       track-by='$index'                                        // 根据index追踪,不是很明白!...片段不被移动,简单地已对应索引的新值刷新,也能处理数据数组中重复的值...

不能检测到以下变化:

1.直接用索引设置元素:    vm.items[0]={};                    // vue解决方案:vm.items.$set(0, { childMsg: 'Changed!'}), vm.items.$remove(item)

2.修改数据的长度:        vm.items.length=0;                // js中常见的清空, vue解决方案:直接用空数组替换

12.对象v-for

内置变量:$key

13.值域v-for

{{ n }}

14.内置的过滤器

   filterBy 和 orderBy

15.方法与事件处理器

·v-on 监听DOM事件

       

       

               // 内联语句处理器, $event为内置变量,原生的DOM事件

·事件修饰符

// 阻止冒泡和默认行为,修饰符可以串联

·按键修饰符

                                   // 键盘事件后面可接keyCode

常见的按键有提供别名:

·enter

·tab

·delete

·esc

·space

·up

·down

·left

·right

16.表单控件绑定

·v-model绑定字段

           // 绑定的值通常是静态字符串,勾选框是布尔值

·参数特性

lazy        // 延迟到change事件中同步(原为input)

number        // 仅允许输入数字

debounce    // 延时同步

17.过渡

典型的过渡:

       

需要添加CSS样式:

.expand-transition(必须), .expand-enter, .expand-leave

*如果未设置, 默认为.v-transition, .v-enter, .v-leave

同时提供钩子:

Vue.transition('expand',{...});

·beforeEnter, enter, afterEnter, enterCancelled, beforeLeave, leave, afterLeave, leaveCancelled

渐近过渡:

           

*钩子stagger, 延时过渡

18.组件

·创建组件:        var c = Vue.extend({

                       template:'

A custom component!
',

});

·注册组件:        Vue.component('my-component', c);                    // 如果名字是myComponent, html中必须写成my-component

   ·使用组件:        

   // html

new Vue({el:'#app'});                                // js

*注册可缩写为    vue.component('my-component',{

                       template:'

A custom component!
',

});

局部注册:

var c = Vue.extend({});

var parentComponent = Vue.extend({

components:{

'my-component': c,

}

});

组件选项:

var c = Vue.extend({

data:function(){

return {a:1};

}

});

is特性:

*table中限制其他的节点不能放置其中

       

   Props:

       props用以从父组件接收数据:

使用:

Vue.component('child',{

props:['msg'],

template:'{{msg}}'

});

声明:

// 字面量语法

// 动态语法

*如果props是myMsg, html中需要用my-msg(即:camelCase - kebab-case, 因为html的特性是不区分大小写)

*字面量和动态语法稍有不同

// 传递了一个字符串 "1"

// 传递实际的数字

Props绑定类型:

// 默认为单向绑定

// 双向绑定

//单次绑定

*如果prop是一个对象或数组,是按引用传递。不管使用哪种绑定方式,都将是双向绑定

Props验证:

props:{            // 此时props是一个对象

propA: Number,

propB:{

type: String,                    // 类型(原生构造器:String, Number, Boolean, Function, Object, Array)

required: true,                    // 是否必须项

default: 'thyiad',                // 默认值(如果是Object, 默认值需由一个函数返回)

validator: function(value){        // 验证

return value === 'thyiad';

},

coerce:function(val){

return val+'';                // 将值强制转换为字符串

return JSON.parse(val);        // 将JSON字符串转换为对象

}

}

}

父子组件通信:

this.$parent        // 子组件访问父组件

this.$root            // 访问根实例

this.$children        // 父组件的所有子元素

*不建议在子组件中修改父组件的状态

自定义事件:

$on()                // 监听事件

$emit()                // 触发事件

$dispatch()            // 派发事件,沿着父链冒泡

$broadcast()        // 广播事件, 向下传递给所有的后代

使用:

子组件中绑定函数派发事件:

methods:{

notify:function(){

this.$dispatch('child-msg',this.msg);

}

}

父组件中定义事件:

events:{

'child-msg':function(msg){

this.messages.push(msg);

}

}

*更直观的声明方式:

// 直观的为父组件定义事件(child-msg), 并且触发父组件的handleIt函数, 子组件只关注触发事件

子组件索引:

       

var child = parent.$refs.profile;

使用Slot分发内容:

单个Slot:

父组件的内容将被抛弃,除非子组件包含

如果只有一个没有特性的slot, 整个内容将被插到它所在的地方, 替换slot.

父组件:

               

                   

parent content

子组件模板:

               

                   

child content

                   

如果父节点没有设置内容,这里才会被显示

命名Slot:

父组件模板:

               

                   

One

                   

two

                   

Default A

子组件模板:

               

                   

// 默认slot, 找不到匹配内容的回退插槽, 如果没有默认的slot, 不匹配内容将被抛弃

                   

动态组件:

可以在不同组件之间切换:

new Vue({

el:'body',

data:{

currentView:'home',

},

components:{

home:{},

posts:{},

archive:{},

}

});

父组件:

// component是Vue保留的元素

*keep-alive用来把切换出去的组件保留在内存中, 可以保留它的状态避免重新渲染

activate钩子:

用以在切入前做一些异步操作:

activate:function(done){

var self = this;

loadDataAsync(function(data){

self.someData=data;

done();

});

}

transition-mode

指定列两个动态组件之间如何过渡:

                   

*默认进入与离开平滑地过渡, 可以指定另外两种模式:in-out, out-in (先进入or先离开)

组件和v-for:

           

*因为组件的作用域是孤立的, v-for里的item无法直接传递给组件, 必须像上面一样使用props传递数据

异步组件

资源命名约定

递归组件

片段实例

*推荐模板只有一个根节点(使用template选项时)

内联模板

组件把它的内容当做它的模板

           

*不推荐

19.深入响应式原理

·如何追踪变化

*使用Object.defineProperty设置getter/setter

·变化检测问题

*不能检测到对象属性的添加或删除

*vm.$set('b', 2);

Vue.set(object, key, value);

·初始化数据

*推荐在data对象上声明所有的响应属性

·异步更新队列

*默认异步更新DOM, 下次事件循环时清空队列, 执行必要的DOM更新

*Vue.nextTick(callback);

·计算属性的秘密

*计算属性是有缓存的, 除非显示设置为不缓存

computed:{

attr:function(){

return Date.now()+this.msg;

}

}

TO:

computed:{

attr:{

cache: false,

get: function(){

return Date.now()+this.msg;

}

}

}

*但只是在JS中访问是这样的, 数据绑定仍是依赖驱动的。        

   

   

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容