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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Vue.js-ÉîÈëÏìӦʽԭÀí
 
  1531  次浏览      28
 2020-5-8 
 
±à¼­ÍƼö:
±¾ÎĽéÉÜÁË Vue ÏìӦʽϵͳµÄµ×²ãµÄϸ½Ú£¬°üÀ¨ÈçºÎ×·×ٱ仯£¬±ä»¯µÄ×¢ÒâÊÂÏÉùÃ÷ÏìӦʽ property£¬Òì²½¸üжÓÁеÈÏà¹Ø¡£
±¾ÎÄÀ´×ÔÓÚ²©¿ÍÔ°,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­ÍƼö¡£

ÏÖÔÚÊÇʱºòÉîÈëÒ»ÏÂÁË£¡Vue ×î¶ÀÌØµÄÌØÐÔÖ®Ò»£¬ÊÇÆä·ÇÇÖÈëÐÔµÄÏìӦʽϵͳ¡£Êý¾ÝÄ£Ðͽö½öÊÇÆÕͨµÄ JavaScript ¶ÔÏó¡£¶øµ±ÄãÐÞ¸ÄËüÃÇʱ£¬ÊÓͼ»á½øÐиüС£ÕâʹµÃ״̬¹ÜÀí·Ç³£¼òµ¥Ö±½Ó£¬²»¹ýÀí½âÆä¹¤×÷Ô­ÀíͬÑùÖØÒª£¬ÕâÑùÄã¿ÉÒԱܿªÒ»Ð©³£¼ûµÄÎÊÌâ¡£ÔÚÕâ¸öÕ½ڣ¬ÎÒÃǽ«Ñо¿Ò»Ï Vue ÏìӦʽϵͳµÄµ×²ãµÄϸ½Ú¡£

ÈçºÎ×·×ٱ仯

ÔÚ Vue Mastery ¹Û¿´ÊÓÆµ½²½â

µ±Äã°ÑÒ»¸öÆÕͨµÄ JavaScript ¶ÔÏó´«Èë Vue ʵÀý×÷Ϊ data Ñ¡ÏVue ½«±éÀú´Ë¶ÔÏóËùÓÐµÄ property£¬²¢Ê¹Óà Object.defineProperty °ÑÕâЩ property È«²¿×ªÎª getter/setter¡£Object.defineProperty ÊÇ ES5 ÖÐÒ»¸öÎÞ·¨ shim µÄÌØÐÔ£¬ÕâÒ²¾ÍÊÇ Vue ²»Ö§³Ö IE8 ÒÔ¼°¸üµÍ°æ±¾ä¯ÀÀÆ÷µÄÔ­Òò¡£

ÕâЩ getter/setter ¶ÔÓû§À´ËµÊDz»¿É¼ûµÄ£¬µ«ÊÇÔÚÄÚ²¿ËüÃÇÈà Vue Äܹ»×·×ÙÒÀÀµ£¬ÔÚ property ±»·ÃÎʺÍÐÞ¸Äʱ֪ͨ±ä¸ü¡£ÕâÀïÐèҪעÒâµÄÊDz»Í¬ä¯ÀÀÆ÷ÔÚ¿ØÖÆÌ¨´òÓ¡Êý¾Ý¶ÔÏóʱ¶Ô getter/setter µÄ¸ñʽ»¯²¢²»Í¬£¬ËùÒÔ½¨Òé°²×° vue-devtools À´»ñÈ¡¶Ô¼ì²éÊý¾Ý¸ü¼ÓÓѺõÄÓû§½çÃæ¡£

ÿ¸ö×é¼þʵÀý¶¼¶ÔÓ¦Ò»¸ö watcher ʵÀý£¬Ëü»áÔÚ×é¼þäÖȾµÄ¹ý³ÌÖаѡ°½Ó´¥¡±¹ýµÄÊý¾Ý property ¼Ç¼ΪÒÀÀµ¡£Ö®ºóµ±ÒÀÀµÏîµÄ setter ´¥·¢Ê±£¬»á֪ͨ watcher£¬´Ó¶øÊ¹Ëü¹ØÁªµÄ×é¼þÖØÐÂäÖȾ¡£

¼ì²â±ä»¯µÄ×¢ÒâÊÂÏî

ÓÉÓÚ JavaScript µÄÏÞÖÆ£¬Vue ²»Äܼì²âÊý×éºÍ¶ÔÏóµÄ±ä»¯¡£¾¡¹ÜÈç´ËÎÒÃÇ»¹ÊÇÓÐһЩ°ì·¨À´»Ø±ÜÕâЩÏÞÖÆ²¢±£Ö¤ËüÃǵÄÏìÓ¦ÐÔ¡£

¶ÔÓÚ¶ÔÏó

Vue ÎÞ·¨¼ì²â property µÄÌí¼Ó»òÒÆ³ý¡£ÓÉÓÚ Vue »áÔÚ³õʼ»¯ÊµÀýʱ¶Ô property Ö´ÐÐ getter/setter ת»¯£¬ËùÒÔ property ±ØÐëÔÚ data ¶ÔÏóÉÏ´æÔÚ²ÅÄÜÈà Vue ½«Ëüת»»ÎªÏìӦʽµÄ¡£ÀýÈ磺

ar vm = new Vue({
data:{
a:1
}
})

// `vm.a` ÊÇÏìӦʽµÄ

vm.b = 2
// `vm.b` ÊÇ·ÇÏìӦʽµÄ

 

¶ÔÓÚÒѾ­´´½¨µÄʵÀý£¬Vue ²»ÔÊÐí¶¯Ì¬Ìí¼Ó¸ù¼¶±ðµÄÏìӦʽ property¡£µ«ÊÇ£¬¿ÉÒÔʹÓà Vue.set(object, propertyName, value) ·½·¨ÏòǶÌ×¶ÔÏóÌí¼ÓÏìӦʽ property¡£ÀýÈ磬¶ÔÓÚ£º

Vue.set(vm.someObject, 'b', 2)

Äú»¹¿ÉÒÔʹÓà vm.$set ʵÀý·½·¨£¬ÕâÒ²ÊÇÈ«¾Ö Vue.set ·½·¨µÄ±ðÃû£º

this.$set(this.someObject,'b',2)

ÓÐʱÄã¿ÉÄÜÐèҪΪÒÑÓжÔÏó¸³Öµ¶à¸öРproperty£¬±ÈÈçʹÓà Object.assign() »ò _.extend()¡£µ«ÊÇ£¬ÕâÑùÌí¼Óµ½¶ÔÏóÉϵÄРproperty ²»»á´¥·¢¸üС£ÔÚÕâÖÖÇé¿öÏ£¬ÄãÓ¦¸ÃÓÃÔ­¶ÔÏóÓëÒª»ìºÏ½øÈ¥µÄ¶ÔÏóµÄ property Ò»Æð´´½¨Ò»¸öеĶÔÏó¡£

/ ´úÌæ `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

¶ÔÓÚÊý×é

Vue ²»Äܼì²âÒÔÏÂÊý×éµÄ±ä¶¯£º

µ±ÄãÀûÓÃË÷ÒýÖ±½ÓÉèÖÃÒ»¸öÊý×éÏîʱ£¬ÀýÈ磺vm.items[indexOfItem] = newValue

µ±ÄãÐÞ¸ÄÊý×éµÄ³¤¶Èʱ£¬ÀýÈ磺vm.items.length = newLength

¾Ù¸öÀý×Ó£º

var vm = new Vue({
data: {
items: ['a', 'b', 'c']
}
})
vm.items[1] = 'x' // ²»ÊÇÏìÓ¦ÐÔµÄ
vm.items.length = 2 // ²»ÊÇÏìÓ¦ÐÔµÄ

ΪÁ˽â¾öµÚÒ»ÀàÎÊÌ⣬ÒÔÏÂÁ½ÖÖ·½Ê½¶¼¿ÉÒÔʵÏÖºÍ vm.items[indexOfItem] = newValue ÏàͬµÄЧ¹û£¬Í¬Ê±Ò²½«ÔÚÏìӦʽϵͳÄÚ´¥·¢×´Ì¬¸üУº

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)

// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)

ÄãÒ²¿ÉÒÔʹÓà vm.$set ʵÀý·½·¨£¬¸Ã·½·¨ÊÇÈ«¾Ö·½·¨ Vue.set µÄÒ»¸ö±ðÃû£º

vm.$set(vm.items, indexOfItem, newValue)

ΪÁ˽â¾öµÚ¶þÀàÎÊÌ⣬Äã¿ÉÒÔʹÓà splice£º

vm.items.splice(newLength)

ÉùÃ÷ÏìӦʽ property

ÓÉÓÚ Vue ²»ÔÊÐí¶¯Ì¬Ìí¼Ó¸ù¼¶ÏìӦʽ property£¬ËùÒÔÄã±ØÐëÔÚ³õʼ»¯ÊµÀýǰÉùÃ÷ËùÓиù¼¶ÏìӦʽ property£¬ÄÄÅÂÖ»ÊÇÒ»¸ö¿ÕÖµ£º

var vm = new Vue({
data: {
// ÉùÃ÷ message Ϊһ¸ö¿ÕÖµ×Ö·û´®
message: ''
},
template: '<div>{{ message }}</div>'
})
// Ö®ºóÉèÖà `message`
vm.message = 'Hello!'

Èç¹ûÄãδÔÚ data Ñ¡ÏîÖÐÉùÃ÷ message£¬Vue ½«¾¯¸æÄãäÖȾº¯ÊýÕýÔÚÊÔͼ·ÃÎʲ»´æÔÚµÄ property¡£

ÕâÑùµÄÏÞÖÆÔÚ±³ºóÊÇÓÐÆä¼¼ÊõÔ­ÒòµÄ£¬ËüÏû³ýÁËÔÚÒÀÀµÏî¸ú×ÙϵͳÖеÄÒ»Àà±ß½çÇé¿ö£¬Ò²Ê¹ Vue ʵÀýÄܸüºÃµØÅäºÏÀàÐͼì²éϵͳ¹¤×÷¡£µ«Óë´ËͬʱÔÚ´úÂë¿Éά»¤ÐÔ·½ÃæÒ²ÓÐÒ»µãÖØÒªµÄ¿¼ÂÇ£ºdata ¶ÔÏó¾ÍÏñ×é¼þ״̬µÄ½á¹¹ (schema)¡£ÌáǰÉùÃ÷ËùÓеÄÏìӦʽ property£¬¿ÉÒÔÈÃ×é¼þ´úÂëÔÚδÀ´Ð޸Ļò¸øÆäËû¿ª·¢ÈËÔ±ÔĶÁʱ¸üÒ×ÓÚÀí½â¡£

Òì²½¸üжÓÁÐ

¿ÉÄÜÄ㻹ûÓÐ×¢Òâµ½£¬Vue ÔÚ¸üРDOM ʱÊÇÒì²½Ö´Ðеġ£Ö»ÒªÕìÌýµ½Êý¾Ý±ä»¯£¬Vue ½«¿ªÆôÒ»¸ö¶ÓÁУ¬²¢»º³åÔÚͬһʼþÑ­»·Öз¢ÉúµÄËùÓÐÊý¾Ý±ä¸ü¡£Èç¹ûͬһ¸ö watcher ±»¶à´Î´¥·¢£¬Ö»»á±»ÍÆÈëµ½¶ÓÁÐÖÐÒ»´Î¡£ÕâÖÖÔÚ»º³åʱȥ³ýÖØ¸´Êý¾Ý¶ÔÓÚ±ÜÃâ²»±ØÒªµÄ¼ÆËãºÍ DOM ²Ù×÷ÊǷdz£ÖØÒªµÄ¡£È»ºó£¬ÔÚÏÂÒ»¸öµÄʼþÑ­»·¡°tick¡±ÖУ¬Vue ˢжÓÁв¢Ö´ÐÐʵ¼Ê (ÒÑÈ¥ÖØµÄ) ¹¤×÷¡£Vue ÔÚÄÚ²¿¶ÔÒì²½¶ÓÁг¢ÊÔʹÓÃÔ­ÉúµÄ Promise.then¡¢MutationObserver ºÍ setImmediate£¬Èç¹ûÖ´Ðл·¾³²»Ö§³Ö£¬Ôò»á²ÉÓà setTimeout(fn, 0) ´úÌæ¡£

ÀýÈ磬µ±ÄãÉèÖà vm.someData = 'new value'£¬¸Ã×é¼þ²»»áÁ¢¼´ÖØÐÂäÖȾ¡£µ±Ë¢Ð¶ÓÁÐʱ£¬×é¼þ»áÔÚÏÂÒ»¸öʼþÑ­»·¡°tick¡±ÖиüС£¶àÊýÇé¿öÎÒÃDz»ÐèÒª¹ØÐÄÕâ¸ö¹ý³Ì£¬µ«ÊÇÈç¹ûÄãÏë»ùÓÚ¸üкóµÄ DOM ״̬À´×öµãʲô£¬Õâ¾Í¿ÉÄÜ»áÓÐЩ¼¬ÊÖ¡£ËäÈ» Vue.js ͨ³£¹ÄÀø¿ª·¢ÈËԱʹÓá°Êý¾ÝÇý¶¯¡±µÄ·½Ê½Ë¼¿¼£¬±ÜÃâÖ±½Ó½Ó´¥ DOM£¬µ«ÊÇÓÐʱÎÒÃDZØÐëÒªÕâô×ö¡£ÎªÁËÔÚÊý¾Ý±ä»¯Ö®ºóµÈ´ý Vue Íê³É¸üРDOM£¬¿ÉÒÔÔÚÊý¾Ý±ä»¯Ö®ºóÁ¢¼´Ê¹Óà Vue.nextTick(callback)¡£ÕâÑù»Øµ÷º¯Êý½«ÔÚ DOM ¸üÐÂÍê³Éºó±»µ÷Óá£ÀýÈ磺

<div id="example">{{message}}</div>

var vm = new Vue({
el: '#example',
data: {
message: '123'
}
})
vm.message = 'new message' // ¸ü¸ÄÊý¾Ý
vm.$el.textContent === 'new message' // false
Vue.nextTick(function () {
vm.$el.textContent === 'new message' // true
})

ÔÚ×é¼þÄÚʹÓà vm.$nextTick() ʵÀý·½·¨Ìر𷽱㣬ÒòΪËü²»ÐèҪȫ¾Ö Vue£¬²¢Çһص÷º¯ÊýÖÐµÄ this ½«×Ô¶¯°ó¶¨µ½µ±Ç°µÄ Vue ʵÀýÉÏ£º

Vue.component('example', {
template: '<span>{{ message }}</span>',
data: function () {
return {
message: 'δ¸üÐÂ'
}
},
methods: {
updateMessage: function () {
this.message = 'ÒѸüÐÂ'
console.log(this.$el.textContent) // => 'δ¸üÐÂ'
this.$nextTick(function () {
console.log(this.$el.textContent) // => 'ÒѸüÐÂ'
})
}
}
})

ÒòΪ $nextTick() ·µ»ØÒ»¸ö Promise ¶ÔÏó£¬ËùÒÔÄã¿ÉÒÔʹÓÃÐ嵀 ES2017 async/await Óï·¨Íê³ÉÏàͬµÄÊÂÇ飺

methods: {
updateMessage: async function () {
this.message = 'ÒѸüÐÂ'
console.log(this.$el.textContent) // => 'δ¸üÐÂ'
await this.$nextTick()
console.log(this.$el.textContent) // => 'ÒѸüÐÂ'
}
}
 
   
1531 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

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

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

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