Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
webǰ¶ËVUE¿ò¼Ü-»ù´¡ÖªÊ¶ ¼°ºËÐÄÔ­Àí
 
  2288  次浏览      29
 2020-5-14 
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÁËʹÓýÅÊּܹ¤¾ß 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£©

 
   
2288 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
ÈçºÎÉè¼Æ¸ßÀ©Õ¹µÄÔÚÏßÍøÒ³ÖÆ×÷ƽ̨
electronÈëÃÅÐĵÃ
ʹÓà Electron ¹¹½¨×ÀÃæÓ¦ÓÃ
VUE.JS×é¼þ»¯¿ª·¢Êµ¼ù
ÉîÈëÀí½âJSCore
×îпγÌ
HTML 5 + CSS3 Ô­ÀíÓ뿪·¢Ó¦ÓÃ
Webǰ¶Ë¸ß¼¶¹¤³Ìʦ±Ø±¸¼¼ÄÜʵս
Vue´óÐÍÏîÄ¿¿ª·¢ÊµÕ½
ReactÔ­ÀíÓëʵ¼ù
Vue.js½ø½×Óë°¸Àýʵ¼ù
³É¹¦°¸Àý
Öн»¼¯ÍÅ ¹¹½¨Web×Ô¶¯»¯²âÊÔ¿ò¼Ü
ijָÃûµçÐŹ«Ë¾ Vue.js½ø½×Óë°¸Àý
¹úµçÍ¨ÍøÂç¼¼Êõ HTML5+CSS3 +webǰ¶Ë¿ò
ÒÆ¶¯Í¨ÐÅ ÒÆ¶¯»¥ÁªÍøÓ¦Óÿª·¢Ô­Àí
ijµçÁ¦ÐÐ android¿ª·¢Æ½Ì¨×î¼Ñ