±à¼ÍƼö: |
±¾ÎÄÀ´×Ôsegmentfault£¬ÎÄÕ½éÉÜÁËÈçºÎ¹¹½¨ÐǼ¶ÆÀ·Öϵͳ×é¼þ£¬½éÉܼ¸ÖÖVue.jsÖеĸÅÄÒÔ¼°»áÔÚÏîÄ¿ÖÐʹÓõ½ËûÃÇ£¬²¢½«ÌÖÂÛΪʲôÎÒÃÇʹÓÃËüÃÇ¡£ |
|
ÎҼǵõ±Ê±ÎÒÄÃÆðCakePHP£¬ÎÒºÜϲ»¶£¬¿ªÊ¼Ê¹ÓÃËüÊǶàôÈÝÒס£ÕâЩÎĵµ²»½ö½á¹¹ºÏÀí£¬Ï꾡ÎÞÒÅ£¬¶øÇÒÓû§ÓѺ᣶àÄêÒÔºó£¬ÕâÕýÊÇÎÒÔÚVue.jsÖиÐÊܵ½µÄ¡£È»¶ø£¬ÓëCakeÏà±È£¬VueÎĵµÈÔȻȱÉÙÒ»¼þÊ£ºÒ»¸öÕæÊµµÄÏîÄ¿½Ì³Ì¡£
ÎÞÂÛ¿ò¼ÜµÄÎĵµ¼Ç¼ÈçºÎ£¬Õâ¶Ôÿ¸öÈËÀ´Ëµ¶¼ÊDz»¹»µÄ¡£ÔĶÁ¸ÅÄî²¢²»×ÜÊÇÓÐÖúÓÚÁ˽â´ó¾Ö»òÁ˽âÈçºÎʹÓÃËüÃÇÀ´Êµ¼ÊÖÆ×÷ijЩ¶«Î÷¡£Èç¹ûÄúÏñÎÒÒ»Ñù£¬Í¨¹ýÖÆ×÷һЩ¿ÉÓõÄ×é¼þÀ´¸üºÃµØÑ§Ï°£¬²¢ÔÚ±àÂëʱ²Î¿¼Îĵµ£¬°ïÖú¼ÇÒäÎĵµºÍÊìÁ·Ê¹ÓÃVue¡£
ÔÚ±¾½Ì³ÌÖУ¬ÎÒÃǽ«¹¹½¨ÐǼ¶ÆÀ·Öϵͳ×é¼þ¡£ÎÒÃǽ«Ñ§Ï°¼¸ÖÖVue.jsÖеĸÅÄÎÒÃÇ»áÔÚÏîÄ¿ÖÐʹÓõ½ËûÃÇ£¬²¢½«ÌÖÂÛΪʲôÎÒÃÇʹÓÃËüÃÇ¡£

ÕâÆªÎÄÕÂÉîÈë½éÉÜÁËÈçºÎÒÔ¼°ÎªºÎ¡£ËüÖ¼ÔÚ°ïÖúÄúÕÆÎÕVue.jsµÄһЩºËÐĸÅÄ²¢½ÌÄúÈçºÎΪδÀ´µÄÏîÄ¿×ö³öÉè¼Æ¾ö²ß¡£Èç¹ûÄúÏëÁ˽âÕû¸ö˼¿¼¹ý³Ì£¬Çë¼ÌÐøÔĶÁ¡£·ñÔò£¬Äú¿ÉÒԲ鿴CodeSandboxÉϵÄ×îÖÕ´úÂë¡£
ÈëÃÅ
Vue.js£¬µ±È»Äã»áÒÔ×Ô¼º×÷Ϊһ¸ö¼òµ¥µÄ½Å±¾ÔËÐжø¾õµÃÒѾ²»´íÁË£¬µ«Êǵ±ÄãÏëʹÓõ¥Îļþ×é¼þʱÇé¿öÓе㲻ͬ¡£µ±È»£¬Äã²»Ò»¶¨±ØÐë¹¹½¨ÒÔ×é¼þµÄÕâÖÖ·½Ê½¡£Äú¿ÉÒÔÍêÃÀµØÊ¹Óö¨ÒåÈ«¾Ö×é¼þVue.component¡£ÎÊÌâÊÇ£¬ÕâÐèҪȨºâ£¬ÀýÈç±ØÐëʹÓÃ×Ö·û´®Ä£°å£¬Ã»Óз¶Î§µÄCSSÖ§³Ö£¬Ò²Ã»Óй¹½¨²½Ö裨Òò´Ë£¬Ã»ÓÐÔ¤´¦ÀíÆ÷£©¡£È»¶ø£¬ÎÒÃÇÏ£Íû¸üÉîÈëµØÑ§Ï°ÈçºÎ¹¹½¨Ò»¸ö¿ÉÒÔÔÚʵ¼ÊÏîÄ¿ÖÐʹÓõÄʵ¼Ê×é¼þ¡£³öÓÚÕâЩÔÒò£¬ÎÒÃǽ«²ÉÓÃÓÉWebpackÌṩ֧³ÖµÄʵ¼ÊÉèÖá£
ΪÁ˼ò»¯²Ù×÷²¢Ëõ¶ÌÅäÖÃʱ¼ä£¬ÎÒÃǽ«Ê¹ÓÃvue-cliºÍwebpack-simple Vue.jsÄ£°å¡£
Ê×ÏÈ£¬ÄúÐèÒªÔÚÈ«¾Ö°²×°vue-cli¡£Æô¶¯Öն˲¢¼üÈëÒÔÏÂÄÚÈÝ£º
ÄúÐèÒª¼ÌÐøÊäÈ룺
vue init webpack-simple
path/to/my-project |
Äã»áÔÚÕâ¸ö¹ý³ÌÖб»Îʵ½¼¸¸öÎÊÌ⡣ѡÔñ³ý¡°Ê¹ÓÃsass¡±ÒÔÍâµÄËùÓÐÄÚÈÝ£¬¶¼ÊÇΪĬÈÏÖµ¡£È»ºó£¬vue-cli½«³õʼ»¯ÏîÄ¿²¢´´½¨package.jsonÎļþ¡£Íê³Éºó£¬Äú¿ÉÒÔµ¼º½µ½ÏîÄ¿µÄĿ¼£¬°²×°ÒÀÀµÏî²¢ÔËÐÐÏîÄ¿£º
cd path/to/my-project
npm install
npm run dev |
²»³öÒâÍ⣡Webpack½«¿ªÊ¼ÔÚ¶Ë¿ÚÉÏÌṩÏîÄ¿8080£¨Èç¹û¿ÉÓã¬8080¶Ë¿ÚûÓб»ÆäËû³ÌÐòÕ¼Ó㩲¢ÔÚä¯ÀÀÆ÷Öд¥·¢Ëü¡£Èç¹ûÒ»ÇÐ˳Àû£¬ÄãÓ¦¸Ã¿´µ½ÏñÕâÑùµÄ»¶ÓÒ³Ãæ¡£

¶ÌÔݵÄÔÝÍ£ - µ÷ÊÔ¹¤¾ß
¼¸ºõ£¡ÒªÕýÈ·µ÷ÊÔVue.js×é¼þ£¬ÄúÐèÒªÕýÈ·µÄ¹¤¾ß¡£¼ÌÐø°²×°Vue.js devtoolsä¯ÀÀÆ÷À©Õ¹³ÌÐò£¨Firefox
/ Chrome / Safari£©¡£
ÄãµÄµÚÒ»¸ö×é¼þ
×îºÃµÄ¹¦ÄÜÖ®Ò»ÊÇVue.jsµ¥Îļþ×é¼þ£¨SFC£©¡£ËüÃÇÔÊÐíÄúÔÚÒ»¸öÎļþÖж¨Òå×é¼þµÄ½á¹¹£¬ÑùʽºÍÐÐΪ£¬¶øÃ»ÓлìºÏHTML£¬CSSºÍJavaScriptµÄ³£¼ûȱµã¡£
SFCÒÔ.vueÀ©Õ¹Ãû½á⣬¾ßÓÐÒÔϽṹ£º
<template>
<!-- Your HTML goes here -->
</template>
<script>
/* Your JS goes here */
</script>v
<style>
/* Your CSS goes here */
</style>
|
ÈÃÎÒÃÇÀ´´´½¨ÎÒÃǵĵÚÒ»¸ö×é¼þ£º´´½¨Ò»¸öRating.vueÎļþ/src/components£¬È»ºó¸´ÖÆ/Õ³ÌùÉÏÃæµÄ´úÂëÆ¬¶Î¡£È»ºó£¬´ò¿ª/src/main.js²¢µ÷ÕûÏÖÓдúÂ룺
import Vue from
'vue'
import Rating from './components/Rating'
new Vue({
el: '#app',
template: '<Rating/>',
components: { Rating }
})
|
×îºó£¬ÎªÄúµÄRating.vueÌí¼ÓһЩHTML£º
<template>
<ul> <li>One</li> <li>Two</li>
<li>Three</li> </ul>
</template> |
ÏÖÔڲ鿴ä¯ÀÀÆ÷ÖеÄÒ³Ãæ£¬ÄúÓ¦¸Ã¿´µ½ÁÐ±í£¡Vue.js½«ÄúµÄ<Rating>×é¼þ¸½¼Óµ½#appÔªËØÖÐindex.html¡£Èç¹û¼ì²éHTML£¬ÔòÓ¦¸Ã¿´²»µ½¸Ã#appÔªËØµÄ·ûºÅ£ºVue.js½«ÆäÌæ»»ÎªRating×é¼þ¡£
ÅÔ×¢£ºÄúÊÇ·ñ×¢Òâµ½ÄúÉõÖÁ²»ÐèÒªÖØÐ¼ÓÔØÒ³Ãæ£¿ÄÇÊÇÒòΪWebpackµÄvue-loader´øÓÐÈÈÖØÔØ¹¦ÄÜ¡£ÓëÊµÊ±ÖØÐ¼ÓÔØ»òä¯ÀÀÆ÷ͬ²½Ïà·´£¬ÈÈÖØÐ¼ÓÔØ²»»áÔÚÿ´Î¸ü¸ÄÎļþʱˢÐÂÒ³Ãæ¡£Ïà·´£¬Ëü»á¼àÊÓ×é¼þ¸ü¸Ä²¢½öË¢ÐÂËüÃÇ£¬±£³Ö״̬²»±ä¡£
ÏÖÔÚÎÒÃÇÒѾ»¨ÁËһЩʱ¼äÀ´ÉèÖ㬵«ÏÖÔÚÊÇÎÒÃÇʵ¼Ê±àдÓÐÒâÒåµÄ´úÂëµÄʱºòÁË¡£
Ä£°ætemplate
ÎÒÃǽ«Ê¹ÓÃvue-awesome£¬Ò»¸öÓÃFont Awesomeͼ±ê¹¹½¨µÄVue.jsµÄSVGͼ±ê×é¼þ¡£ÕâÔÊÐíÎÒÃÇÖ»¼ÓÔØÎÒÃÇÐèÒªµÄͼ±ê¡£¼ÌÐøÊ¹ÓÃnpm£¨»òYarn£©°²×°Ëü£º
È»ºó±à¼ÄúµÄ×é¼þ£¬ÈçÏÂËùʾ£º
<template>
<div> <ul> <li><icon
name="star"/></li> <li><icon
name="star"/></li> <li><icon
name="star"/></li> <li><icon
name="star-o"/></li> <li><icon
name="star-o"/></li> </ul>
<span>3 of 5</span> </div>
</template>
<script>
import 'vue-awesome/icons/star'
import 'vue-awesome/icons/star-o'
import Icon from 'vue-awesome/components/Icon'
export default {
components: { Icon }
}
</script>
|
ºÃ°ÉºÃ°É£¬ÈÃÎÒÃÇ·ÅÂý½Å²½²¢½âÊÍËùÓÐÕâЩÄÚÈÝ??
Vue.jsʹÓÃÔÉúES6Ä£¿éÀ´´¦ÀíÒÀÀµÏîºÍµ¼³ö×é¼þ¡£<script>¿éÖеÄǰÁ½Ðбíʾµ¥¶Àµ¼Èëͼ±ê£¬Òò´ËÄú×îÖÕ²»»áÔÚ×îÖÕbundle(×ÊÔ´)ÖÐÕÒµ½Äú²»ÐèÒªµÄͼ±ê¡£µÚÈý¸öIcon×é¼þÊÇ´Óvue-awesomeÖе¼³öµÄ£¬Òò´ËÄú¿ÉÒÔÔÚÄúµÄ×é¼þÖÐʹÓÃËü¡£
IconÒ²ÊÇÒ»¸öVue.jsµÄµ¥Îļþ×é¼þ(SFC)£¬¾ÍÏñÎÒÃÇÕýÔÚ¹¹½¨µÄ×é¼þÄÇÑù¡£Èç¹ûÄã´ò¿ªÎļþ£¬Äã»á·¢ÏÖËü¾ßÓÐÓëÎÒÃÇÍêÈ«ÏàͬµÄ½á¹¹¡£
¸Ãexport defaultµ¼³ö¶ÔÏóÎÄ×Ö×÷Ϊ×é¼þµÄÊÓͼģÐÍ¡£ÎÒÃÇÔÚµ±Ç°µÄcomponentsÖÐ×¢²áÁËIcon×é¼þ£¬Òò´ËÎÒÃÇ¿ÉÒÔÔÚÎÒÃǵı¾µØÊ¹ÓÃËü¡£
×îºó£¬ÎÒÃÇÔÚ<template>ʹÓÃHTMLËü²¢´«µÝÁËÒ»¸önameÊôÐÔÀ´¶¨ÒåÎÒÃÇÏëÒªµÄͼ±ê¡£×é¼þ¿ÉÒÔͨ¹ý½«ËüÃÇת»»Îªkebab-case£¨ÀýÈ磺MyComponent³ÉΪ`<my-component>£©À´ÓÃ×÷×Ô¶¨ÒåHTML±ê¼Ç¡£ÎÒÃDz»ÐèÒªÔÚ×é¼þÄÚǶÌ×Èκζ«Î÷£¬Òò´ËÎÒÃÇʹÓÃÁË×Ապϱê¼Ç¡£
ÅÔ×¢£ºÄúÊÇ·ñ×¢Òâµ½ÔÚHTMLÖÜΧÌí¼ÓÁËÒ»¸ö<div>°ü×°£¿ÄÇÊÇÒòΪÎÒÃÇ»¹ÔÚ¸ù¼¶±ðÌí¼ÓÁËÒ»¸ö¼ÆÊýÆ÷<span>£¬¶øVue.jsÖеÄ×é¼þÄ£°åÖ»½ÓÊÜÒ»¸ö¸ùÔªËØ¡£Èç¹ûÄã²»×ñÑÕâ¸ö¹æÔò£¬Äã»áÊÕµ½±àÒë´íÎó¡£
ÑùʽCSS
Èç¹ûÄãÒѾʹÓùýCSSÒ»¶Îʱ¼äÁË£¬ÄãÖªµÀÆäÖÐÒ»¸öÖ÷ÒªÎÊÌâÊDZØÐë´¦ÀíËüµÄÈ«¾ÖÐÔ¡£Ç¶Ì×Ò»Ö±±»ÈÏΪÊǽâ¾öÕâ¸öÎÊÌâµÄ·½·¨¡£ÏÖÔÚÎÒÃÇÖªµÀËü¿ÉÒԺܿ쵼ÖÂÌØÊâÐÔÎÊÌ⣬ʹµÃÑùʽÄÑÒÔ¸²¸Ç£¬Òà»òÎÞ·¨ÖØÓã¬ÒÔ¼°ÊÇÀ©Õ¹µÄجÃΡ£
ÏñBEMÕâÑùµÄ·½·¨±»·¢Ã÷À´Í¨¹ýÃüÃû¿Õ¼äÀàÀ´¹æ±ÜÕâ¸öÎÊÌâ²¢±£³ÖµÍÌØÒìÐÔ¡£ÔÚÒ»¶Îʱ¼äÄÚ£¬ËüÊDZàд¸É¾»ÇÒ¿ÉÀ©Õ¹µÄCSSµÄÀíÏ뷽ʽ¡£È»ºó£¬ÏñVue.js»òReactÕâÑùµÄ¿ò¼ÜºÍ¿â³öÏÖÁË£¬²¢´øÀ´ÁË·¶Î§Ñùʽ¡£
React¾ßÓÐÑùʽ»¯µÄ×é¼þ£¬Vue.js¾ßÓÐ×é¼þ·¶Î§µÄCSS¡£ËüÔÊÐíÄú±àÐ´ÌØ¶¨ÓÚ×é¼þµÄCSS£¬¶øÎÞÐèÌá¹©Ê²Ã´ÌØ¶¨ÉñÆæµÄ¼¼ÇÉ¡£ÄúʹÓá°ÆÕͨ¡±ÀàÃû±àд³£¹æCSS£¬²¢ÇÒVue.jsͨ¹ý½«Êý¾ÝÊôÐÔ·ÖÅ䏸HTMLÔªËØ²¢½«Æä¸½¼Óµ½ÒѱàÒëÑùʽÀ´È·¶¨´¦Àí·¶Î§¡£
ÈÃÎÒÃÇÔÚ×é¼þÉÏÌí¼ÓһЩ¼òµ¥µÄÀࣺ
<template>
<div class="rating"> <ul
class="list"> <li class="star
active"><icon name="star"/></li>
<li class="star active"><icon
name="star"/></li> <li
class="star active"><icon name="star"/></li>
<li class="star"><icon name="star-o"/></li>
<li class="star"><icon name="star-o"/></li>
</ul> <span>3 of 5</span>
</div>
</template> |
²¢Ìí¼ÓÉÏÑùʽ£º
Hello World!<style
scoped>
.rating {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
font-size: 14px;
color: #a7a8a8;
}
.list {
margin: 0 0 5px 0;
padding: 0;
list-style-type: none;
}
.list:hover .star {
color: #f3d23e;
}
.star {
display: inline-block;
cursor: pointer;
margin: 0 1px;
}
.star:hover ~ .star:not(.active) {
color: inherit;
}
.active {
color: #f3d23e;
}
</style> |
Äã¿´µ½ÁËscopedÊôÐÔÁËÂð£¿Õâ¾ÍÊǸæËßVue.js£¬ÈçºÎÈ·¶¨Ñùʽ·¶Î§µÄÔÒò£¬Òò´ËËüÃDz»»áй©µ½ÈÎºÎÆäËûµØ·½¡£Èç¹ûÄúÕýÈ·µØÔÚindex.html¸´ÖÆ/Õ³ÌùHTML´úÂ룬Äú»á×¢Òâµ½ÄúµÄÑùʽ²»ÉúЧ£ºÄÇÊÇÒòΪËüÃǵÄ×÷ÓÃÓòÊÇ×é¼þ£¡??
ÄÇôÔõôÑùÔ¤´¦ÀíÄØ£¿
Vue.js¿ÉÒÔÇáËÉµØ´ÓÆÕͨµÄCSSÇл»µ½Äú×îϲ»¶µÄÔ¤´¦ÀíÆ÷ģʽ¡£ÄúÖ»ÐèÒªÕýÈ·µÄʹÓÃWebpack
loader£¬²¢ÔÚ<style>¿éÉÏÉèÖüòµ¥µÄÊôÐÔ¡£»¹¼ÇµÃÎÒÃÇÔÚÉú³ÉÏîÄ¿µÄʱºò£¬ÎÊÎÒÃÇÊÇ·ñʹÓÃsassÂð£¬Èç¹ûÑ¡Ôñ"ÊÇ"ʹÓÃsass¡£Í¬Ê±vue-cliÒѾΪÎÒÃǰ²×°²¢ÅäÖÃÁËsass-loader¡£ÏÖÔÚ£¬ÎÒÃÇÐèÒª×öµÄ¾ÍÊÇÔÚ<style>Ìí¼Ólang="scss"±ê¼Ç¡£
ÎÒÃÇÏÖÔÚ¿ÉÒÔʹÓÃSass½øÐбàд×é¼þ¼¶±ð·ç¸ñµÄ£¬Í¨¹ýimportÒýÈëSass£¬¾ÍÏñʹÓÃimportÒýÈë±äÁ¿£¬ÑÕÉ«¶¨ÒåµÈ¡£Èç¹ûÄãϲ»¶µÄËõ½øÓï·¨£¨»ò¡°sass¡±·ûºÅ£©£¬Ö»ÐèlangÊôÐÔÇл»scssΪsass¡£
behavior - ÐÐΪ
ÏÖÔÚÎÒÃǵÄ×é¼þ¿´ÆðÀ´ºÜºÃ£¬ÊÇʱºòÈÃËü¹¤×÷ÁË¡£Ä¿Ç°£¬ÎÒÃÇÓÐÒ»¸öÓ²±àÂëÄ£°å¡£ÈÃÎÒÃÇÉèÖÃһЩ³õʼģÄâ״̬²¢µ÷ÕûÄ£°åÒÔ±ãËü·´Ó³³öÀ´£º
<script>
...
export default {
components: { Icon },
data() {
return {
stars: 3,
maxStars: 5
}
}
}
</script> |
Ä£°æÐ޸ģº
<template>
<div class="rating"> <ul
class="list"> <li v-for="star
in maxStars" :class="{ 'active': star
<= stars }" class="star">
<icon :name="star <= stars ? 'star'
: 'star-o'"/> </li> </ul>
<span>3 of 5</span> </div>
</template> |
ÎÒÃÇÔÚÕâÀï×öµÄÊÇʹÓÃVue dataÀ´ÉèÖÃ×é¼þ״̬¡£Äú¶¨ÒåµÄÿ¸öÊôÐÔ¶¼»á¸ú×ÅdataÖеÄÊôÐÔ½øÐа󶨣ºÈç¹ûËü·¢Éú±ä»¯£¬Ëü½«·´Ó³ÔÚÊÓͼÖС£
ÎÒÃÇÕýÔÚÖÆ×÷Ò»¸ö¿ÉÖØÓõÄ×é¼þ£¬Òò´ËdataÐèÒªÊÇÒ»¸ö¹¤³§º¯Êý¶ø²»ÊÇÒ»¸ö¶ÔÏó×ÖÃæÁ¿¡£Í¨¹ýÕâÖÖ·½Ê½£¬ÎÒÃÇ»ñµÃÁËÒ»¸öжÔÏ󣬶ø²»ÊǶԽ«ÔÚ¶à¸ö×é¼þÖ®¼ä¹²ÏíµÄÏÖÓжÔÏóµÄÒýÓá£
ÎÒÃǵÄdata¹¤³§·µ»ØÁ½¸öÊôÐÔ£ºstars±íʾµ±Ç°¡°¼¤»î¡±ÐÇÊýÁ¿£¬maxStars±íʾ×ܵÄÐÇÐÇÊýÁ¿¡£´ÓÕâЩ£¬ÎÒÃǵ÷ÕûÁËÎÒÃǵÄÄ£°å£¬ÒÔ±ãËü·´Ó³Êµ¼Ê×é¼þµÄ״̬¡£Vue.js¸½´øÁËһϵÁÐÖ¸Á¿ÉÒÔÈÃÄúÔÚÄ£°åÖÐÌí¼Ó±íʾÂß¼£¬¶øÎÞÐ轫ÆäÓë´¿JavaScript»ìºÏʹÓ᣸Ãv-forÖ¸Áî±éÀúÈκοɵü´ú¶ÔÏó£¨Êý×飬¶ÔÏóÎÄ×Ö£¬Ó³ÉäµÈ£©¡£ËüÒ²¿ÉÒÔ½«Êý×Ö×÷ÎªÖØ¸´x´ÎµÄ·¶Î§¡£Õâ¾ÍÊÇÎÒÃÇËù×öµÄv-for="star
in maxStars"£¬ËùÒÔÎÒÃÇ<li>¶Ô×é¼þÖеÄÿ¸öÐǶ¼ÓÐÒ»¸ö¡£
Äú¿ÉÄÜÒѾעÒ⵽ijЩÊôÐÔÒÔðºÅΪǰ׺£ºÕâÊǸÃv-bindÖ¸ÁîµÄ¼òд£¬Ëü½«ÊôÐÔ¶¯Ì¬°ó¶¨µ½±í´ïʽ¡£ÎÒÃDZ¾À´¿ÉÒÔÓÃËüµÄ²»Ê¡ÂÔÐÎʽд³öÀ´£ºv-bind:class¡£
µ±ÐǺŴ¦ÓÚ¼¤»î״̬ʱ£¬ÎÒÃÇÐèÒª<li>ÔªËØÉϸ½¼ÓactiveÀà¡£ÔÚÎÒÃǵÄÀý×ÓÖУ¬ÕâÒâζ×Åÿ¸ö<li>Ë÷Òý¶¼Ó¦¸ÃСÓÚstar²ÅÄܸ½¼ÓactiveÀà¡£ÎÒÃÇÔÚ:classÖ¸ÁîÖÐʹÓÃÁËÒ»¸ö±í´ïʽ£¬Ö»ÔÚµ±Ç°starСÓÚstarsµÄʱºò×·¼Óactive¡£ÎÒÃÇʹÓÃÏàͬµÄÌõ¼þ£¬Õâ´ÎʹÓÃÈýÔªÔËËã·ûÀ´¶¨ÒåÓëIcon×é¼þÒ»ÆðʹÓõÄͼ±ê£ºstar»òstar-o¡£
¼ÆÊýÆ÷Ó¦¸ÃÈçºÎ
¼ÈÈ»ÎÒÃǵÄstarÁбíÓëʵ¼ÊÊý¾Ý°ó¶¨£¬ÄÇôÎÒÃǾÍÓ¦¸ÃΪ¼ÆÊýÆ÷×öͬÑùµÄÊÂÁË¡£×î¼òµ¥µÄ·½·¨ÊÇʹÓá°ºú×ÓÓï·¨¡±½øÐÐÎı¾²åÖµ£º
<span>{{
stars }} of {{ maxStars }}</span> |
ºÜÖ±°×£¬²»ÊÇÂð£¿ÏÖÔÚÔÚÎÒÃǵÄÀý×ÓÖУ¬Õâ¿ÉÒÔ½â¾öÎÊÌ⣬µ«Èç¹ûÎÒÃÇÐèÒª¸ü¸´ÔÓµÄJavaScript±í´ïʽ£¬×îºÃÔÚ¼ÆËãÊôÐÔÖÐ¶ÔÆä½øÐгéÏó¡£
export default {
...
computed: {
counter() {
return `${this.stars} of ${this.maxStars}`
}
}
} |
ÕâÀïÓеã½ÃÍ÷¹ýÕý¡£ÎÒÃÇ¿ÉÒÔʹÓÃÄ£°åÄÚ±í´ïʽ¿ÉÒÔ±£³Ö¿É¶ÁÐÔ¡£È»¶ø£¬µ±Äú±ØÐë´¦Àí¸ü¸´ÔÓµÄÂ߼ʱ£¬Çë¼Çס¼ÆËãÊôÐÔ??¡£
ÎÒÃÇÐèÒª×öµÄÁíÒ»¼þÊÂÊÇÌṩһÖÖ·½·¨À´Òþ²Ø¼ÆÊýÆ÷£¬Èç¹ûÎÒÃDz»ÏëÒªËü¡£×î¼òµ¥µÄ·½·¨ÊÇʹÓÃv-if´øÓв¼¶ûÖµµÄÖ¸Áî¡£
<span v-if="hasCounter">{{
stars }} of {{ maxStars }}</span> |
dataÖÐÌí¼ÓhasCounterÊôÐÔ
export default
{
...
data() {
return {
stars: 3,
maxStars: 5,
hasCounter: true
}
}
} |
½»»¥
ÎÒÃDz¶àÍê³ÉÁË£¬µ«ÎÒÃÇÈÔÈ»ÐèҪʵÏÖ×é¼þÖÐ×îÓÐȤµÄ²¿·Ö£º·´Ó¦ÐÔ¡£ÎÒÃǽ«Ê¹ÓÃv-on´¦ÀíʼþµÄVue.jsÖ¸ÁÒÔ¼°methodsÒ»¸ö¿ÉÒÔ¸½¼ÓËùÓз½·¨µÄVue.jsÊôÐÔ¡£
<template>
... <li @click="rate(star)" ...>
...
</template> |
methodsÖÐ
export default
{
...
methods: {
rate(star) {
// do stuff
}
}
} |
ÎÒÃÇÔÚÉÏÃæÌí¼ÓÁËÒ»¸ö@clickÊôÐÔ<li>£¬ÕâÊÇÒ»¸ö¼òдv-on:click¡£¸ÃÖ¸Áî°üº¬ÎÒÃÇÔÚmethods×é¼þÊôÐÔÖж¨ÒåµÄrate·½·¨µÄµ÷Óá£
¡°µÈÒ»ÏÂ......Õâ¿´ÆðÀ´·Ç³£ÊìϤHTMLµÄonclickÊôÐÔ¡£ÔÚHTMLÖÐʹÓÃÄÚÁªJavaScript²»ÊÇÒ»ÖÖ¹ýʱµÄ´íÎó×ö·¨Â𣿡°
ȷʵÈç´Ë£¬µ«¼´Ê¹Óï·¨¿´ÆðÀ´ºÜÏñonclick£¬±È½ÏÁ½ÕßÒ²ÊÇÒ»¸ö´íÎó¡£µ±Äú¹¹½¨Vue.js×é¼þʱ£¬Äú²»Ó¦½«ÆäÊÓΪ·ÖÀëµÄHTML
/ CSS / JS£¬¶øÓ¦½«ÆäÊÓΪʹÓöàÖÖÓïÑÔµÄÒ»¸ö×é¼þ¡£µ±ÏîÄ¿ÔÚä¯ÀÀÆ÷ÖбàÒëºó£¬ËùÓÐHTMLºÍÖ¸Áî¶¼±àÒëΪ´¿JavaScript¡£Èç¹ûÔÚä¯ÀÀÆ÷Öмì²é³ÊÏÖµÄHTML£¬Ôò²»»á¿´µ½ÈκÎÖ¸ÁîµÄ¼£Ïó£¬Ò²²»»á¿´µ½ÈκÎonclickÊôÐÔ¡£Vue.js±àÒëÁËÄúµÄ×é¼þ²¢´´½¨ÁËÕýÈ·µÄ°ó¶¨¡£ÕâÒ²ÊÇÄú¿ÉÒÔÖ±½Ó´ÓÄ£°å·ÃÎÊ×é¼þÉÏÏÂÎĵÄÔÒò£ºÒòΪָÁî°ó¶¨µ½ÊÓͼģÐÍ¡£Óë¾ßÓе¥¶ÀHTMLµÄ´«Í³ÏîÄ¿Ïà·´£¬Ä£°åÊÇ×é¼þµÄ×é³É²¿·Ö¡£
»Øµ½ÎÒÃǵÄrate·½·¨¡£ÎÒÃÇÐèÒªÔÚclickʱºòÐÞ¸ÄstarsΪµ±Ç°liµÄË÷Òý£¬ËùÒÔÎÒÃÇ´Ó@clickÖ¸Áî´«µÝË÷Òý£¬ÎÒÃÇ¿ÉÒÔÖ´ÐÐÒÔϲÙ×÷£º
export default
{
...
methods: {
rate(star) {
this.stars = star
}
}
} |
ÔÚä¯ÀÀÆ÷ÖÐ²é¿´Ò³Ãæ²¢³¢ÊÔµã»÷ÐDZ꣺ËüÓÐЧ£¡
Èç¹ûÄúÔÚä¯ÀÀÆ÷devtoolsÖдò¿ªVueÃæ°å²¢Ñ¡Ôñ¸Ã<Rating>×é¼þ£¬Äú½«ÔÚµ¥»÷ÐDZêʱ¿´µ½Êý¾Ý·¢Éú±ä»¯¡£Õâ±íÃ÷ÄúµÄstarsÊôÐÔÊDZ»°ó¶¨µÄ£ºµ±Äú¶ÔÆä½øÐÐÐÞ¸Äʱ£¬Ëü»á½«Æä¸ü¸Ä·ÖÅɸøÊÓͼ¡£Õâ¸ö¸ÅÄî³ÆÎªÊý¾Ý°ó¶¨£¬Èç¹ûÄãÔø¾Ê¹ÓùýÏñBackbone.js»òKnockoutÕâÑùµÄ¿ò¼Ü£¬ÄãÓ¦¸ÃÊìϤËü¡£²»Í¬Ö®´¦ÔÚÓÚVue.jsÓëReactÒ»Ñù£¬½öÔÚÒ»¸ö·½ÏòÉÏÖ´ÐУºÕâ³ÆÎªµ¥ÏòÊý¾Ý°ó¶¨¡£µ«Õâ¸ö»°ÌâÓÖ¿ÉÒÔÓÃÁíһƪÎÄÕÂÀ´ÌÖÂÛÁË??
µ½Õâ¸öµãÉÏ£¬ÎÒÃÇ¿ÉÒÔ³ÆÖ®ÎªÍê³É£¬µ«ÎÒÃÇ¿ÉÒÔ×ö¸ü¶àµÄ¹¤×÷À´¸ÄÉÆÓû§ÌåÑé¡£
ÏÖÔÚ£¬ÎÒÃÇʵ¼ÊÉϲ»Äܸø³öÁãµÈ¼¶£¬ÒòΪµã»÷Ò»¸öÐDZ꽫starsÉèÖÃΪÆäË÷Òý£¬¶øliµÄË÷ÒýÓÀÔ¶´óÓÚ0¡£¸üºÃµÄ×ö·¨ÊÇÖØÐµã»÷ͬһ¿ÅÐDz¢ÈÃËüÇл»µ±Ç°×´Ì¬¶ø²»ÊDZ£³Ö»îԾ״̬??¡£
export default
{
...
methods: {
rate(star) {
this.stars = this.stars === star ? star - 1 :
star
}
}
} |
ÏÖÔÚ£¬Èç¹ûµã»÷µÄÐǵÄË÷ÒýµÈÓÚµ±Ç°Öµstars£¬ÎÒÃǼõÉÙËüµÄÖµ¡£·ñÔò£¬ÎÒÃÇΪÆä¸³Öµstar¡£
Èç¹ûÎÒÃÇÏë³¹µ×£¬ÎÒÃÇ»¹Ó¦¸ÃÌí¼ÓÒ»²ã±£»¤£¬ÒÔÈ·±£starsÓÀÔ¶²»»á·ÖÅäÒ»¸öûÓÐÒâÒåµÄÖµ¡£ÎÒÃÇÐèҪȷ±£starsÓÀÔ¶²»»áÉÙÓÚ0£¬ÓÀÔ¶²»»á³¬¹ýmaxStars£¬²¢ÇÒÕâÊÇÒ»¸öºÏÊʵÄÊý×Ö¡£
export default
{
...
methods: {
rate(star) {
if (typeof star === 'number' && star <=
this.maxStars && star >= 0) {
this.stars = this.stars === star ? star - 1 :
star
}
}
}
} |
passing props ÊôÐÔ´«µÝ
ÏÖÔÚ£¬×é¼þµÄÊý¾ÝÔÚdataÊôÐÔÖÐÊÇÓ²±àÂëµÄ¡£Èç¹ûÎÒÃÇÏ£ÍûÎÒÃǵÄ×é¼þʵ¼Ê¿ÉÓã¬ÎÒÃÇÐèÒªÄܹ»´ÓÆäʵÀý´«µÝ×Ô¶¨ÒåÊý¾Ý¡£ÔÚVue.jsÖУ¬ÎÒÃÇÓÃprops¿ÉÒÔ×öµ½¡£
export default
{
props: ['grade', 'maxStars', 'hasCounter'],
data() {
return {
stars: this.grade
}
},
...
} |
²¢ÔÚmain.js£º
new Vue({
el: '#app',
template: '<Rating :grade="3" :maxStars="5"
:hasCounter="true"/>',
components: { Rating }
}) |
ÕâÀïÓÐÈý¼þÊÂÐèҪעÒ⣺
Ê×ÏÈ£¬ÎÒÃÇʹÓÃv-bind¼òдÀ´´Ó×é¼þʵÀý´«µÝprops£ºÕâ¾ÍÊÇVue.jsËùνµÄ¶¯Ì¬Óï·¨¡£µ±ÄúÏëÒª´«µÝ×Ö·û´®ÖµÊ±£¬Äú²»ÐèÒªËü£¬Ê¹ÓÃÎÄ×ÖÓï·¨£¨²»´øv-bindµÄÕý³£ÊôÐÔ£©½«Æð×÷Óᣵ«ÔÚÎÒÃǵÄÀý×ÓÖУ¬ÓÉÓÚÎÒÃÇ´«µÝÊý×ֺͲ¼¶ûÖµ£¬ËùÒÔÎÒÃÇÕâÑù×öºÜÖØÒª¡£
propsºÍdataÌØÐÔÊÇÔÚ±àÒëʱºÏ²¢ÁË£¬ËùÒÔpropsÖеÄÊôÐԻᱻÊÓͼģÐÍÖеıêÇ©°ó¶¨(Èç¹û¶¨ÒåÁË)¡£µ«³öÓÚͬÑùµÄÔÒò£¬ÎÒÃDz»ÄÜʹÓÃÏàͬµÄÃû³ÆpropsºÍdataÊôÐÔ£¬·ñÔòdataÖеÄÊôÐԻᱻpropsÖеÄÊôÐÔ¸²¸Ç¡£
×îºó£¬ÎÒÃǶ¨ÒåÁËÒ»¸ögrade props£¬²¢Í¨¹ýËü×÷Ϊһ¸ödataµÄstarsÊôÐÔ¡£Ö®ËùÒÔÎÒÃÇÕâÑù×ö£¬¶ø²»ÊÇÖ±½ÓʹÓÃgrade
props£¬ÊÇÒòΪµ±ÎÒÃǸıäµÈ¼¶Ê±£¬star»á·¢ÉúÐ޸ġ£ÔÚVue.jsÖУ¬propsÊÇ´Ó¸¸Ä¸×é¼þ´«µÝ¸øº¢×Ó×é¼þ£¬¶ø²»ÊÇÏà·´£¬ËùÒÔÄã²»»áÒâÍâµØ¸Ä±ä¸¸Ä¸µÄ״̬¡£Õ⽫Υ·´µ¥ÏòÊý¾ÝÁ÷ÔÔò²¢Ê¹ÊÂÇé¸üÄѵ÷ÊÔ¡£Õâ¾ÍÊÇΪʲôÄãÓ¦¸Ã²»³¢ÊÔÐÞ¸Ä×Ó×é¼þÄÚµÄÊôÐÔ¡£Ïà·´£¬¶¨ÒåÒ»¸ödataʹÓÃpropµÄ³õʼֵ×÷Ϊ×Ô¼ºµÄ±¾µØÊôÐÔ£¬Ò²ÊÇÒ»¸öºÜºÃµÄÑ¡Ôñ¡£
×îºóµÄÐÞ¸Ä
ÎÒÃǽ«Ê¹ÓÃVue.jsÖеÄÒ»¸öºÜ²»´íµÄ¹¦ÄÜ: prop validation
Vue.jsÔÊÐíÄúÔÚ½«Êý¾Ý´«µÝ¸ø×é¼þ֮ǰ¶ÔÆä½øÐпØÖÆ¡£Äú¿ÉÒÔÖ´ÐÐÒÔÏÂËÄÏîÖ÷Òª²Ù×÷£º¼ì²éÀàÐÍ£¬ÒªÇó¶¨Òåprop£¬ÉèÖÃĬÈÏÖµÒÔ¼°Ö´ÐÐ×Ô¶¨ÒåÑéÖ¤¡£
export default
{
props: {
grade: {
type: Number,
required: true
},
maxStars: {
type: Number,
default: 5
},
hasCounter: {
type: Boolean,
default: true
}
},
...
} |
ÎÒÃÇʹÓÃÀàÐͼì²éÀ´È·±£½«ÕýÈ·ÀàÐ͵ÄÊý¾Ý´«µÝ¸ø×é¼þ¡£Èç¹ûÎÒÃÇÍü¼ÇʹÓö¯Ì¬Óï·¨´«µÝ·Ç×Ö·û´®Öµ£¬Õâ½«ÌØ±ðÓÐÓá£ÎÒÃÇ»¹È·±£gradeÊÇ·ûºÏ×é¼þµÄ¸ø¶¨ÒªÇó½øÐд«µÝµÄ¡£¶ÔÓÚÆäËûµÀ¾ß£¬ÎÒÃǶ¨ÒåÁËĬÈÏÖµ£¬Òò´Ë¼´Ê¹Ã»Óд«µÝ×Ô¶¨ÒåÊý¾Ý£¬×é¼þÒ²ÄÜÕý³£¹¤×÷¡£
ÏÖÔÚÎÒÃÇ¿ÉÒÔͨ¹ýÖ´ÐÐÒÔϲÙ×÷À´ÊµÀý»¯×é¼þ£º
¾ÍÊÇÕâÑù£¡Äú´´½¨Á˵ÚÒ»¸öVue.js×é¼þ£¬²¢Ì½ÌÖÁ˺ܶà¸ÅÄ°üÀ¨Éú³ÉÓëÑù°åÚÓVUE-CLI£¬µ¥Îļþ×é¼þ£¬ÔÚ×é¼þÊý¾Ý´«µÝ£¬scope
style£¬Ö¸Áʼþ´¦Àí£¬¼ÆËãÊôÐÔ£¬Vue methods£¬µ¥·½Ê½Êý¾ÝÁ÷£¬propsºÍprop validation¡£¶øÕâ½ö½öÊÇVue.jsËùÌṩµÄdzÏԵŦÄÜ£¡
ÕâÊÇÒ»¸ö·Ç³£Ãܼ¯µÄ½Ì³Ì£¬ËùÒÔÈç¹ûÄã²»Àí½âÒ»ÇУ¬²»Òªµ£ÐÄ¡£ÔÙ´ÎÔĶÁ£¬ÔÚ¸÷²¿·ÖÖ®¼äÔÝÍ££¬Ì½Ë÷²¢°ÚŪCodeSandboxÉϵĴúÂë¡£Èç¹ûÄú¶Ô±¾½Ì³ÌÓÐÈκÎÒÉÎÊ»òÆÀÂÛ£¬Çë²»ÒªÓÌÔ¥£¬ÔÚ΢²©ÉÏ@ÎÒ£¡
½áβ
Èç¹ûÄúÓÐÐÒÒѾ¶Áµ½ÕâÀÏàÐÅÒ»¶¨¶ÔÄúÓÐËù°ïÖú¡£
±¾ÎÄΪ·ÒëÎÄ£¬²¢Ìí¼ÓһЩ×Ô¼ºµÄÌÖÂÛ£¬ºÜ¶àµØ·½²»Á÷³©£¬Çë¼ûÁ¡£
±¾ÎĵÄÔ´Âërating-vue-component£¬Èç¹û¶ÔÄúÓÐÓã¬Ï£ÍûÄú¸ø¸östar
|