±à¼ÍƼö: |
±¾ÎÄÖ÷Òª½éÉÜÁËʹÓýÅÊּܹ¤¾ß
vue-cli ¿ÉÒÔ¿ìËٵع¹½¨ÏîÄ¿£ºµ¥Îļþ Vue ×é¼þ£¬ÈȼÓÔØ£¬±£´æÊ±¼ì²é´úÂ룬µ¥Ôª²âÊԵȡ£
±¾ÎÄÀ´×ÔÓÚÖªºõ,ÓÉ»ðÁú¹ûÈí¼þAnna±à¼ÍƼö¡£ |
|
Vue (¶ÁÒô /vju:/£¬ÀàËÆÓÚ view) ÊÇÒ»Ì×ÓÃÓÚ¹¹½¨Óû§½çÃæµÄ½¥½øÊ½¿ò¼Ü
ÌØµã£ºÒ×Óá¢Áé»î¡¢¸ßЧ
È«¼ÒͰ£ºvue + components£¨vue element / iview...£© + vue-router
+ vuex + vue-cli
Àà¿â vs ²å¼þ vs ×é¼þ vs ¿ò¼Ü
Àà¿â£ºjquery¡¢zepto¡¢underscore...
²å¼þ£ºdialog¡¢banner¡¢drag¡¢tab¡¢iscroll...
×é¼þ£ºbootstrap¡¢swiper...
¿ò¼Ü£ºbackbone¡¢angular¡¢vue¡¢react¡¢uni-app¡¢react native¡¢flutter...
ÉùÃ÷ʽºÍÃüÁîʽ
ÃüÁîʽ±à³Ì£ºÃüÁî¡°»úÆ÷¡±ÈçºÎÈ¥×öÊÂÇé(how)£¬ÕâÑù²»¹ÜÄãÏëÒªµÄÊÇʲô(what)£¬Ëü¶¼»á°´ÕÕÄãµÄÃüÁîʵÏÖ£¬ÀýÈçforÑ»·
ÉùÃ÷ʽ±à³Ì£º¸æËß¡°»úÆ÷¡±ÄãÏëÒªµÄÊÇʲô(what)£¬ÈûúÆ÷Ïë³öÈçºÎÈ¥×ö(how)£¬ÀýÈçÊý×éÄÚÖ÷½·¨forEachµÈ

MVC & MVVM
´«Í³²Ù×÷DOMģʽ
MVC£ºmodel view controller
MVVM£ºmodel view viewModel


<div id="app">
{{msg}}
</div>
<!-- IMPORT JS -->
<script src="node_modules/vue/dist/vue.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
msg: 'hello world'
}
});
setTimeout(() => {
vm.msg = 'ÄãºÃÊÀ½ç';
}, 1000);
</script>
<div id="app">
ÈËÃñ±Ò£º£¤<input type="text" v-model='price'>Ôª
<br>
ÃÀÔª£º${{price/8}}
</div>
<!-- IMPORT JS -->
<script src="node_modules/vue/dist/vue.min.js"></script>
<script>
let vm = new Vue({
el: '#app',
data: {
price: 0
}
});
</script> |
VUEµÄ»ù´¡Óï·¨
new Vue(options)
·µ»ØÖµvm£¨viewModel£©
el£º²»ÄܹÒÔØµ½html»òÕßbodyÉÏ =>querySelector
data
Êý¾ÝÖµ¶ÔÓÚ¶ÔÏóÀ´ËµÒªÏÈÉùÃ÷£¬·ñÔòÐÂÔöÊôÐÔÎÞЧ£¨¿ÉÒÔ»ùÓÚvm.$set´¦Àí£©
vm.arr[0]=xxx ¸Ä±äÊý×éÖеÄijһÏîÊÓͼ²»»áäÖȾ£¬ÐèÒª»ùÓÚÄÚÖõķ½·¨£¬ÀýÈ磺push...
¶ÔÏó»òÕßÊý×é¿ÉÒÔÕûÌåÌæ»»ÖµÊµÏÖÊý¾Ý±äÊÓͼҲ±ä
...
mustache Сºú×ÓÓï·¨
value
JS±í´ïʽ
³£ÓõÄÖ¸Ádirective£©
v-model
v-html / v-text£ºÈ¡ÏûСºú×ÓÓ﷨ˢÐÂÖеÄÉÁ˸ÎÊÌâ
v-bind£¨Ëõд :£©
v-once
v-if ºÍ v-show
v-for
for inÑ»· & for ofÑ»·
±éÀúÊý¾ÝÀàÐ͵ķ¶Î§
ÔÐÍÉÏ·½·¨±éÀú£¨»òÕßÊý×éÐÂÔöµÄxxx:xxxÊôÐÔ±éÀú£©
......
Symbol.iteratoer£ºArray¡¢Set¡¢Map¡¢String¡¢Arguments¡¢NodeList...
v-on ʼþ°ó¶¨
v-on:xxx
methods £ººÍdataÀàËÆ£¬¶¼»á°Ñ·½·¨¹ÒÔØµ½vmʵÀýÉÏ£¨this¶¼Êǵ±Ç°ÊµÀý£©
@xxx
@xxx="func" & @xxx="func($event,...)"
directive×Ô¶¨ÒåÖ¸Áî
Vue.directive([Ö¸ÁîÃû£¬Ê¡ÂÔv-], function(el,bindings,vnode){}
elµ±Ç°ÔªËØ
bindings°üº¬ºÜ¶àÐÅÏ¢
name£ºÖ¸ÁîÃû£¬²»°üÀ¨ v- ǰ׺
value£ºÖ¸ÁîµÄ°ó¶¨Öµ
oldValue£ºÖ¸Áî°ó¶¨µÄǰһ¸öÖµ£¬½öÔÚ update ºÍ componentUpdated ¹³×ÓÖпÉÓÃ
expression£º×Ö·û´®ÐÎʽµÄÖ¸Áî±í´ïʽ
arg£º´«¸øÖ¸ÁîµÄ²ÎÊý£¬¿ÉÑ¡¡£ÀýÈç v-my-directive:foo ÖУ¬²ÎÊýΪ "foo"
modifiers£º°üº¬ÐÞÊηûµÄ¶ÔÏó¡£ÀýÈ磺my-directive.foo.bar ÖУ¬ÐÞÊηû¶ÔÏó
{ foo: true, bar: true }
vnodeÐéÄâDOM
ctx = vnode.context »ñÈ¡µ±Ç°ÔªËØËùÔÚµÄÉÏÏÂÎÄ
ctx[bindings.expression]=xxx »ñÈ¡ÉÏÏÂÎÄÖеıí´ïʽ±äÁ¿£¬²¢ÇÒ°ÑÖ¸¶¨µÄÖµ¸³Öµ¸øËü
¹³×Óº¯Êý
bind£ºµ±Óû§°ó¶¨Ö¸ÁîʱÉúЧ£¨Ö»µ÷Ò»´Î£©
update£ºËùÔÚ×é¼þµÄ VNode ¸üÐÂʱµ÷Ó㬵«ÊÇ¿ÉÄÜ·¢ÉúÔÚÆä×Ó VNode ¸üÐÂ֮ǰ£¨Ò»¸öº¯ÊýµÄ·½Ê½¾ÍÊǰÑbindºÍupdateºÏÔÚÒ»ÆðµÄд·¨£©
componentUpdated£ºÖ¸ÁîËùÔÚ×é¼þµÄ VNode ¼°Æä×Ó VNode È«²¿¸üкóµ÷ÓÃ
unbind£ºÖ»µ÷ÓÃÒ»´Î£¬Ö¸ÁîÓëÔªËØ½â°óʱµ÷ÓÃ
inserted£º±»°ó¶¨ÔªËزåÈ븸½Úµãʱµ÷Óà (½ö±£Ö¤¸¸½Úµã´æÔÚ£¬µ«²»Ò»¶¨Òѱ»²åÈëÎĵµÖÐ)
СÁ·Ï°£º´´½¨Ò»¸ö×Ô¶¨ÒåÖ¸Áî¿ØÖÆÎı¾¿òµÄУÑé
ʼþÐÞÊηû
³£¹æ£º.stop / .prevent / .once ...
°´¼ü£º.enter »òÕß .13 / .up / .down / .left / .right ...
×éºÏÐÞÊηû
...
±íµ¥ÔªËصĴ¦Àí
ÆÕͨÎı¾¿ò »òÕß Îı¾Óò
µ¥Ñ¡¿ò
¸´Ñ¡¿ò
ÏÂÀ¿ò
С°¸Àý£ºÈ«Ñ¡ºÍ·Çȫѡ
¼ÆËãÊôÐÔ¡¢¹ýÂËÆ÷¡¢¼àÌýÆ÷
methods ÆÕͨ·½·¨
filters ¹ýÂËÆ÷
Ö»ÄÜÓ¦Óõ½ºú×ÓÓï·¨ºÍv-bindÖÐ
СÁ·Ï°£ºÊäÈëÄÚÈݵĵ¥´ÊÊ××Öĸ´óд
computed
getter & setter
Ïà¶ÔÓÚÆÕͨ·½·¨À´½²£¬¼ÆËãÊôÐÔÊÇ»ùÓÚËüÃǵÄÏìӦʽÒÀÀµ½øÐлº´æµÄ
ÒÀÀµdataÖеÄÊý¾Ý±äÁ¿
СÁ·Ï°£ºÊäÈëÄÚÈݵĵ¥´ÊÊ××Öĸ´óд
СÁ·Ï°£ºÈ«Ñ¡ºÍ·Çȫѡ
watch
µ±ÐèÒªÔÚÊý¾Ý±ä»¯Ê±Ö´ÐÐÒì²½»ò¿ªÏú½Ï´óµÄ²Ù×÷ʱӦÓüàÌýÆ÷
СÁ·Ï°£ºÈ«Ñ¡ºÍ·Çȫѡ
СÁ·Ï°£ºÊý¾ÝÒì²½°ó¶¨µÄ´¦Àí
data(){
return {
checked:false, //ÊÇ·ñȫѡ
checkModel:[]
}
},
watch:{
checkModel(){
if(this.checkModel.length==this.list.length){
this.checked=true;
}else{
this.checked=false;
}
}
}
... |
classºÍstyle°ó¶¨
classµÄ´¦Àí£¨¶ÔÏóÓï·¨¡¢Êý×éÓï·¨£©
ÄÚÁªÑùʽµÄ´¦Àí
...
ÉúÃüÖÜÆÚº¯Êý£¨¹³×Óº¯Êý£©
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestory
destory
...
³£ÓõÄÊôÐÔ·½·¨
$set : ÉèÖÃÏìӦʽÊý¾Ý
$el : ¹ÒÔØµÄÔªËØ
$destroy : Ïú»ÙvueµÄʵÀý£»Í¬Ê±µ÷ÓÃbeforeDestroy destroyed
$mount : ¹ÒÔØÕæÊµDOMµÄ·½·¨
$data : ÏìӦʽµÄ¶ÔÏó
$options: ÊÇVueµÄ¹¹Ô캯ÊýµÄ²ÎÊý
$refs : ¿ÉÒÔÓÃÀ´»ñȡָ¶¨µÄÔªËØ¶ÔÏó £¨·ÇÊÜ¿Ø×é¼þ£©
$on : ¶©ÔÄ
$emit : ·¢²¼
$watch£º¼à¿Ø
...
°¸Àý£ºÑ¡Ï
°¸Àý£º¹ºÎï³µ¼ÆËãÆ÷
°¸Àý£ºÉ̳ÇÀà±ðɸѡ
Ë«ÏòÊý¾Ý°ó¶¨µÄʵÏÖÔÀí
Object.defineProperty
ʵÏֵĵײãÔÀí
//observer:¹Û²ìÕß
function observer(obj) {
if (obj && typeof obj === 'object')
{
for (let key in obj) {
if (!obj.hasOwnProperty(key)) break;
defineReactive(obj, key, obj[key]);
}
}
}
function defineReactive(obj, key, value) {
observer(value);
Object.defineProperty(obj, key, {
get() {
return value;
},
set(newValue) {
observer(newValue);
if (value === newValue) return;
value = newValue;
}
});
}
function $set(data, key, value) {
defineReactive(data, key, value);
} |

Vue Ö÷Ҫͨ¹ýÒÔÏ 4 ¸ö²½ÖèÀ´ÊµÏÖÊý¾ÝË«Ïò°ó¶¨µÄ£ºÊµÏÖÒ»¸ö¼àÌýÆ÷ Observer£º¶ÔÊý¾Ý¶ÔÏó½øÐбéÀú£¬°üÀ¨×ÓÊôÐÔ¶ÔÏóµÄÊôÐÔ£¬ÀûÓÃ
Object.defineProperty() ¶ÔÊôÐÔ¶¼¼ÓÉÏ setter ºÍ getter¡£ÕâÑùµÄ»°£¬¸øÕâ¸ö¶ÔÏóµÄij¸öÖµ¸³Öµ£¬¾Í»á´¥·¢
setter£¬ÄÇô¾ÍÄܼàÌýµ½ÁËÊý¾Ý±ä»¯¡£
ʵÏÖÒ»¸ö½âÎöÆ÷ Compile£º½âÎö Vue Ä£°åÖ¸Á½«Ä£°åÖеıäÁ¿¶¼Ìæ»»³ÉÊý¾Ý£¬È»ºó³õʼ»¯äÖÈ¾Ò³ÃæÊÓͼ£¬²¢½«Ã¿¸öÖ¸Áî¶ÔÓ¦µÄ½Úµã°ó¶¨¸üк¯Êý£¬Ìí¼Ó¼àÌýÊý¾ÝµÄ¶©ÔÄÕߣ¬Ò»µ©Êý¾ÝÓб䶯£¬ÊÕµ½Í¨Öª£¬µ÷Óøüк¯Êý½øÐÐÊý¾Ý¸üС£
ʵÏÖÒ»¸ö¶©ÔÄÕß Watcher£ºWatcher ¶©ÔÄÕßÊÇ Observer ºÍ Compile Ö®¼äͨÐŵÄÇÅÁº
£¬Ö÷ÒªµÄÈÎÎñÊǶ©ÔÄ Observer ÖеÄÊôÐÔÖµ±ä»¯µÄÏûÏ¢£¬µ±ÊÕµ½ÊôÐÔÖµ±ä»¯µÄÏûϢʱ£¬´¥·¢½âÎöÆ÷ Compile
ÖжÔÓ¦µÄ¸üк¯Êý¡£
ʵÏÖÒ»¸ö¶©ÔÄÆ÷ Dep£º¶©ÔÄÆ÷²ÉÓà ·¢²¼-¶©ÔÄ Éè¼ÆÄ£Ê½£¬ÓÃÀ´ÊÕ¼¯¶©ÔÄÕß Watcher£¬¶Ô¼àÌýÆ÷
Observer ºÍ ¶©ÔÄÕß Watcher ½øÐÐͳһ¹ÜÀí¡£
VUEÖеÄ×é¼þ£¨component£©
×é¼þµÄÌØµãÊÇ£º
ÿ¸ö×é¼þ¾ÍÊÇÒ»¸ö×Ô¶¨Òå±êÇ©
¿É¸´ÓÃ
·½±ãά»¤
·½±ã²ð·Ö
ÿ¸ö×é¼þ×÷ÓÃÓò¸ôÀ루»¥²»¸ÉÈÅ£©
ÓÐÍêÕûµÄÉúÃüÖÜÆÚ
ÓÐ×Ô¼ºµÄÏìӦʽÊý¾ÝºÍ¸÷ÖÖ·½·¨£¨Ê¼þ£©
...
1.È«¾Ö×é¼þ & ×é¼þµÄ»ù±¾Óï·¨
ÔÚÈκÎ×é¼þÖпÉÒÔÖ±½ÓʹÓ㨲»ÐèÒªÒýÈ룬ֱ½ÓÔÚ×é¼þÄ£°åÖе÷Óü´¿É£© Vue.component(componentName,options)
×é¼þÃû×ÖÖеÄÒ»µã¹æ·¶
kebab-case£ºÖ»Äܵ÷ÓÃ
PasalCase£º¼È¿ÉÀàËÆÇ°ÖÖ·½Ê½µ÷Óã¬Ò²¿ÉÒÔ·½Ê½µ÷ÓÃ
µ÷ÓÃ×é¼þµÄϸ½Ú¹æ·¶
²ÉÓÃË«±ÕºÏ·½Ê½
µ¥±ÕºÏ·½Ê½²»·ûºÏw3c¹æ·¶£¨Ö»ÄÜʶ±ðÒ»¸ö£©
template
ÿ¸ö×é¼þÖ»ÄÜÓÐÒ»¸ö¸ùÔªËØ
Ä£°å×Ö·û´®·½Ê½
template±ê¼Ç·½Ê½
slot²å²Û´¦Àí
»ù´¡²Ù×÷
¶à²å²ÛµÄÖ¸¶¨
data±ØÐëÊÇÒ»¸öº¯Êý£¬±£Ö¤²»Í¬×é¼þÖ®¼äµÄÊý¾Ý»¥²»¸ÉÈÅ£¨·µ»ØµÄ¶ÔÏóÖгõʼ»¯Êý¾Ý£©
...
<my-component>
<template v-slot:xxx »òÕß #xxx>
Öé·åÅàѵ
</template>
</my-component>
{
templete:`<div>
<slot name='xxx'></slot>
</div>`
} |
2.¾Ö²¿×é¼þ
´´½¨×é¼þ£ºlet componenName={...}
»ùÓÚcomponentsÊôÐÔÉùÃ÷×é¼þ£ºÏëÓÃÄĸö×é¼þÐèÒªÏÈÉùÃ÷
ʹÓÃ×é¼þ
3.×é¼þÐÅϢͨѶ֮¸¸´«×Ó£ºpropsÊôÐÔ´«µÝ
¸¸×é¼þµ÷Óõ½µÄʱºò
<my-component
aa='zhufeng' : bb='xxx'></my-component> |
×Ó×é¼þÖлùÓÚpropsÉùÃ÷ÐèÒª½ÓÊÕµÄÊôÐÔÖµ
Vue.component('my-component',{
props:['aa','bb'],
...
}) |
propsÖÐÉùÃ÷µÄÊôÐÔºÍdataÒ»Ñù£¬ÊÇÏìӦʽÊý¾Ý£¬¹ÒÔØµ½vmʵÀýÉÏ£¬¿É¿ØÖÆÊÓͼäÖȾ
propsÖеÄһЩϸ½ÚÎÊÌâ
ÃüÃû´óСд£º´«µÝµÄÊÇkebab-case¸ñʽ£¬propsÖлñÈ¡µÄÊÇcamelCaseÍÕ·åÃüÃû
Ö¸¶¨ÊôÐÔµÄÀàÐÍ£ºprops:{xxx:String,...}
Ö¸¶¨ÊôÐÔµÄĬÈÏÖµ£ºprops:{xxx:{type:String,default:'xxx',required:true}}
typeÈç¹ûÊÇÒ»¸öÊý×飬ÒâΪָ¶¨µÄ¶àÀàÐͽԿÉÒÔ
default¿ÉÒÔÊÇÒ»¸öº¯Êý£¬º¯Êý·µ»ØÖµÊÇĬÈÏÖµ
validator×Ô¶¨ÒåÑéÖ¤¹æÔòº¯Êý£º±ØÐë·ûºÏº¯ÊýÖÐÖ¸¶¨µÄ¹æÔò£¬·µ»Øtrue/false
´«µÝµÄÊôÐÔֵĬÈ϶¼ÊÇ×Ö·û´®¸ñʽ£¬Èç¹ûÏëÒªÈô«µÝµÄÖµÊÇÊý×Ö¡¢²¼¶û¡¢Êý×é¡¢¶ÔÏóµÈ¸ñʽ£¬ÎÒÃÇÐèҪʹÓÃv-bind´¦Àí
ÑùʽºÍclass×Ô¶¯ºÏ²¢ÎÊÌâ
4.vueµÄµ¥ÏòÊý¾ÝÁ÷
ËùÓÐµÄ prop ¶¼Ê¹µÃÆä¸¸×Ó prop Ö®¼äÐγÉÁËÒ»¸öµ¥ÏòÏÂÐа󶨣º¸¸¼¶ prop µÄ¸üлáÏòÏÂÁ÷¶¯µ½×Ó×é¼þÖУ¬µ«ÊÇ·´¹ýÀ´Ôò²»ÐС£
Vue µÄ¸¸×é¼þºÍ×Ó×é¼þÉúÃüÖÜÆÚ¹³×Óº¯ÊýÖ´ÐÐ˳Ðò¿ÉÒÔ¹éÀàΪÒÔÏ 4 ²¿·Ö£º
¼ÓÔØäÖȾ¹ý³Ì£º¸¸ beforeCreate -> ¸¸ created -> ¸¸ beforeMount
-> ×Ó beforeCreate -> ×Ó created -> ×Ó beforeMount
-> ×Ó mounted -> ¸¸ mounted
×Ó×é¼þ¸üйý³Ì£º¸¸ beforeUpdate -> ×Ó beforeUpdate ->
×Ó updated -> ¸¸ updated
¸¸×é¼þ¸üйý³Ì£º¸¸ beforeUpdate -> ¸¸ updated
Ïú»Ù¹ý³Ì£º¸¸ beforeDestroy -> ×Ó beforeDestroy -> ×Ó
destroyed -> ¸¸ destroyed
ÿ´Î¸¸¼¶×é¼þ·¢Éú¸üÐÂʱ£¬×Ó×é¼þÖÐËùÓÐµÄ prop ¶¼½«»áË¢ÐÂΪ×îеÄÖµ¡£ÕâÒâζ×ÅÄã²»Ó¦¸ÃÔÚÒ»¸ö×Ó×é¼þÄÚ²¿¸Ä±ä
prop¡£Èç¹ûÄãÕâÑù×öÁË£¬Vue »áÔÚä¯ÀÀÆ÷µÄ¿ØÖÆÌ¨Öз¢³ö¾¯¸æ¡£×Ó×é¼þÏëÐÞ¸Äʱ£¬Ö»ÄÜͨ¹ý $emit
ÅÉ·¢Ò»¸ö×Ô¶¨Òåʼþ£¬¸¸×é¼þ½ÓÊÕµ½ºó£¬Óɸ¸×é¼þÐ޸ġ£ÓÐÁ½ÖÖ³£¼ûµÄÊÔͼ¸Ä±äÒ»¸ö prop µÄÇéÐÎ :
Õâ¸ö prop ÓÃÀ´´«µÝÒ»¸ö³õʼֵ£»Õâ¸ö×Ó×é¼þ½ÓÏÂÀ´Ï£Íû½«Æä×÷Ϊһ¸ö±¾µØµÄ prop Êý¾ÝÀ´Ê¹Óá£
ÔÚÕâÖÖÇé¿öÏ£¬×îºÃ¶¨ÒåÒ»¸ö±¾µØµÄ data ÊôÐÔ²¢½«Õâ¸ö prop ÓÃ×÷Æä³õʼֵ
Õâ¸ö prop ÒÔÒ»ÖÖÔʼµÄÖµ´«ÈëÇÒÐèÒª½øÐÐת»»¡£ ÔÚÕâÖÖÇé¿öÏ£¬×îºÃʹÓÃÕâ¸ö prop µÄÖµÀ´¶¨ÒåÒ»¸ö¼ÆËãÊôÐÔ
5.×é¼þÐÅϢͨѶ֮×Ӹĸ¸£ºthis.$emit
¶©ÔÄ×Ô¶¨Òåʼþ£ºµ÷ÓÃ×é¼þµÄʱºò»ùÓÚÊôÐÔ´«µÝÒ»¸ö·½·¨ £¨¸¸£©
<my-component
@func='xxx'></my-component>
new Vue({
methods:{
xxx(value){
//=>valueÊÇthis.$emitʱºò´«µÝµÄµÚ¶þ¸ö²ÎÊýÖµ
}
}
}); |
Öª×Ô¶¨ÒåʼþÖ´ÐÐ £¨×Ó£©
{
methods:{
xxx(){
this.$emit('func',10);
}
}
} |
Ò²¿ÉÒÔ»ùÓÚ´Ë·½·¨ÊµÏÖÐÖµÜ×é¼þ£¨¸¸×Ó×é¼þ¡¢¸ô´ú×é¼þ£©Ö®¼äµÄÐÅϢͨÐÅ
let eventBus=new
Vue; //=>´´½¨Ê¼þ×ÜÏß
//A×é¼þ
eventBus.$on('xxxA',this.func);
//B×é¼þ
eventBus.$emit('xxxA'); |
6.»ùÓÚrefʵÏÖ¸¸×Ó×é¼þÐÅϢͨÐÅ
ref Èç¹ûÔÚÆÕͨµÄ DOM ÔªËØÉÏʹÓã¬ÒýÓÃÖ¸ÏòµÄ¾ÍÊÇ DOM ÔªËØ£»Èç¹ûÓÃÔÚ×Ó×é¼þÉÏ£¬ÒýÓþÍÖ¸Ïò×é¼þʵÀý£¬»ùÓÚ´Ë¿ÉÒÔ¿ìËÙ»ñÈ¡ºÍ²Ù×÷×Ó×é¼þÖеÄÊý¾Ý
parentºÍchildrenÊÇ»ñÈ¡×é¼þºÍ×Ó×é¼þµÄʵÀý£¬Ö»²»¹ý$childrenÊÇÒ»¸öÊý×鼯ºÏ£¬ÐèÒªÎÒÃǼÇס×é¼þ˳Ðò²Å¿ÉÒÔ
7.»ùÓÚprovideºÍinjectʵÏÖ׿ÏÈÓëºó´úµÄͨÐÅ
׿ÏÈ×é¼þ»ùÓÚprovide×¢²áÐèÒª¹©ºó´ú×é¼þʹÓõÄÊý¾Ý
{
provide:{ //=>¶ÔÏó»òÕß·µ»Ø¶ÔÏóµÄº¯Êý¶¼¿ÉÒÔ £¨ÊôÐÔÖµÈç¹ûÊÇdataÖеÄÊý¾Ý£¬Ôò±ØÐëʹÓú¯ÊýµÄ·½·¨½øÐд¦Àí£©
name:'zhufeng',
year:10
},
...
} |
ºó´ú×é¼þ»ùÓÚinjectÉùÃ÷ÐèҪʹÓõÄÊý¾Ý²¢µ÷ȡʹÓÃ
{
inject:['name'],
methods:{
func(){
let name=this.name;
}
}
} |
VUEÖеÄTRANSITION¶¯»
1. ʲôÇé¿öÏ»áÓö¯»
Ìõ¼þäÖȾ v-if
Ìõ¼þչʾ v-show
¶¯Ì¬×é¼þ ÀýÈ磺vue-router¿ØÖÆ×é¼þäÖȾ
...
2. ÈçºÎʵÏÖ¶¯»
ÐÞ¸ÄÔªËØµÄÑùʽ£ºstyle & class
ʹÓÃJSʵÏÖ¶¯»£¨Ç°Á½ÖÜÔÚijЩ³¡¾°Ï¶¼ÐèÒª×Ô¼ºÖ±½ÓÈ¥²Ù×÷DOM»òÕ߸ü¼ÓµÄÂé·³£©
ʹÓÃvueÄÚÖõÄtransition & transition-group
3. transitionµÄ»ù´¡Ê¹ÓÃ
v-enter£º¶¨Òå½øÈë¹ý¶ÉµÄ¿ªÊ¼×´Ì¬£¬ÔÚÔªËØ±»²åÈë֮ǰÉúЧ£¬ÔÚÔªËØ±»²åÈëÖ®ºóµÄÏÂÒ»Ö¡ÒÆ³ý
v-enter-active£º¶¨Òå½øÈë¹ý¶ÉÉúЧʱµÄ״̬£¬ÔÚÕû¸ö½øÈë¹ý¶ÉµÄ½×¶ÎÖÐÓ¦Óã¬ÔÚÔªËØ±»²åÈë֮ǰÉúЧ£¬ÔÚ¹ý¶É/¶¯»Íê³ÉÖ®ºóÒÆ³ý
v-enter-to: ¶¨Òå½øÈë¹ý¶ÉµÄ½áÊø×´Ì¬£¬ÔªËر»²åÈëÖ®ºóÏÂÒ»Ö¡ÉúЧ £¬ÔÚ¹ý¶É/¶¯»Íê³ÉÖ®ºóÒÆ³ý
v-leave: ¶¨ÒåÀ뿪¹ý¶ÉµÄ¿ªÊ¼×´Ì¬£¬ÔÚÀ뿪¹ý¶É±»´¥·¢Ê±Á¢¿ÌÉúЧ£¬ÏÂÒ»Ö¡±»ÒƳý
v-leave-active£º¶¨ÒåÀ뿪¹ý¶ÉÉúЧʱµÄ״̬£¬ÔÚÕû¸öÀ뿪¹ý¶ÉµÄ½×¶ÎÖÐÓ¦Óã¬ÔÚÀ뿪¹ý¶É±»´¥·¢Ê±Á¢¿ÌÉúЧ£¬ÔÚ¹ý¶É/¶¯»Íê³ÉÖ®ºóÒÆ³ý
v-leave-to: ¶¨ÒåÀ뿪¹ý¶ÉµÄ½áÊø×´Ì¬£¬ÔÚÀ뿪¹ý¶É±»´¥·¢Ö®ºóÏÂÒ»Ö¡ÉúЧ£¬ÔÚ¹ý¶É/¶¯»Íê³ÉÖ®ºóÒÆ³ý
»ùÓÚ transiton ±ê¼ÇÖÐµÄ name ÊôÐÔÀ´½øÐж¯»ÑùÊ½Çø·Ö
.demo-enter µÈ
×Ô¶¨Òå¹ý¶ÉÀàÃû£¨ÀýÈ磺½áºÏanimate.cssʹÓã©
<transition
enter-active-class="animated xxx" leave-active-class="animated
xxx"
4.JAVASCRIPTÖе͝»¹³×Óº¯Êý
Velocity.jsº¯Êý
<transition
@before-enter="beforeEnter"
@enter="enter"
@after-enter="afterEnter"
@before-leave="beforeLeave"
...
>
</transition>
methods:{
beforeEnter: function (el,done) {
},
...
} |
5. transition-group ´¦Àí¶à×éÔªËØ¶¯»
Èç¹ûÔÚtransition-groupÖÐʹÓÃv-for£¬ÐèÒªÉèÖÃ:keyΨһֵ
СÁ·Ï°£º¹Ø¼ü´ÊÄ£ºýÆ¥ÅäËÑË÷
×ÛºÏʵս°¸Àý
1. ÂÖ²¥Í¼µÄʵÏÖ
2. TASK OAÈÎÎñ¹ÜÀíϵͳ£¨Ë׳ÆTODO£© |