Vue.js: 3 рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди

Vue.js рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдПрдкреАрдЖрдИ рд╣реИ, рдпрд╣ рддреЗрдЬ, рд▓рдЪреАрд▓рд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, Vue.js рдХрд╛ рд▓рдЪреАрд▓рд╛рдкрди рдХреБрдЫ рдЦрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЫреЛрдЯреЗ рдУрд╡рд░рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рдг рд╣реИрдВред рдпрд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рддрд┐рдХреВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛, рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред



рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд▓реЗрдЦрдХ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ V.ss.s.s рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдЧрдгрд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рдЕрдВрджрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡


рдХрдореНрдкреНрдпреВрдЯреЗрдб рдЧреБрдг рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ Vue.js рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд░рд╛рдЬреНрдп рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдиреНрдп рд░рд╛рдЬреНрдп рдЯреБрдХрдбрд╝реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдХрдореНрдкреНрдпреВрдЯреЗрдб рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд░рд╛рдЬреНрдп рдХреЗ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ рдпрд╛ рдЕрдиреНрдп рд░рд╛рдЬреНрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

export default {   data() {     return {       array: [1, 2, 3]     };   },   computed: {     reversedArray() {       return this.array.reverse(); //   -         }   } }; 

рдпрджрд┐ рд╣рдо array рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдФрд░ reversedArray рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рджреЛрдиреЛрдВ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╛рди рдорд╛рди рд╣реИрдВред

  : [ 3, 2, 1 ]  : [ 3, 2, 1 ] 

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдХреА рдЧрдИ reversedArray .reverse() рдкреНрд░реЙрдкрд░реНрдЯреА рдЕрдкрдиреА .reverse() рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдореВрд▓ array рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд╣реИред рдпрд╣ рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд┐рдПред

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдХреАрдордд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

 export default {  props: {    order: {      type: Object,      default: () => ({})    }  },  computed:{    grandTotal() {      let total = (this.order.total + this.order.tax) * (1 - this.order.discount);      this.$emit('total-change', total)      return total.toFixed(2);    }  } } 

рдпрд╣рд╛рдВ рд╣рдордиреЗ рдПрдХ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдИ рд╣реИ рдЬреЛ рдХрд░реЛрдВ рдФрд░ рдЫреВрдЯ рд╕рд╣рд┐рдд рдЖрджреЗрд╢ рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪреВрдБрдХрд┐ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреБрд▓ рдСрд░реНрдбрд░ рд╡реИрд▓реНрдпреВ рдпрд╣рд╛рдБ рдмрджрд▓ рд░рд╣реА рд╣реИ, рд╣рдо рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдХреЛ рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ grandTotal рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдореВрд▓ рдШрдЯрдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреА рд╣реИред

 <price-details :order="order"               @total-change="totalChange"> </price-details> export default {  //        methods: {    totalChange(grandTotal) {      if (this.isSpecialCustomer) {        this.order = {          ...this.order,          discount: this.order.discount + 0.1        };      }    }  } }; 

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХрднреА-рдХрднреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рдХрдо рд╣реА, рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╣рдо рд╡рд┐рд╢реЗрд╖ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ 10% рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рдЫреВрдЯ рджреЗрддреЗ рд╣реИрдВред рд╣рдо order рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА discount рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ 0.1 рдЬреЛрдбрд╝рдХрд░ рдЫреВрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдЧрд▓рдд рдЧрд▓рддреА рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ред


рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢


рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдЖрджреЗрд╢ рдореВрд▓реНрдп рдЧрдгрдирд╛

рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ: рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рд▓рдЧрд╛рддрд╛рд░, рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ, "рдкреБрдирд░рд╛рд╡рд░реНрддреА" рд╣реЛрддреА рд╣реИред рд╣рдо рдЫреВрдЯ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдЗрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреА рд╣реИ, рдЖрджреЗрд╢ рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд рдХреЛ рдкреБрди: рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рдШрдЯрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЫреВрдЯ рдлрд┐рд░ рд╕реЗ рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреБрдирд░реНрдЧрдгрдирд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ - рдЕрдирдиреНрддрддрд╛ рддрдХред

рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рддреАрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЧрд▓рддреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡реЗрджрди рдореЗрдВ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рд╣реИ? рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдпрджрд┐ рдЗрд╕ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ) рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдРрд╕реА рдЧрд▓рддреА рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдСрд░реНрдбрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЦрд░реАрджрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрджреЗрд╢ рдореЗрдВ 1000 рдирд┐рдпрдорд┐рдд рдСрд░реНрдбрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдиреЗрд╕реНрдЯреЗрдб рдЧреБрдг рдмрджрд▓рдирд╛


рдХрднреА-рдХрднреА рдХрд┐рд╕реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ props рд╕реЗ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдХреБрдЫ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд╕реНрддреБ рдпрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд "рд╕рд░рд▓" рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 <template>  <div class="hello">    <div>Name: {{product.name}}</div>    <div>Price: {{product.price}}</div>    <div>Stock: {{product.stock}}</div>    <button @click="addToCart" :disabled="product.stock <= 0">Add to card</button>  </div> </template> export default {  name: "HelloWorld",  props: {    product: {      type: Object,      default: () => ({})    }  },  methods: {    addToCart() {      if (this.product.stock > 0) {        this.$emit("add-to-cart");        this.product.stock--;      }    }  } }; 

рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Product.vue рдШрдЯрдХ рд╣реИ, рдЬреЛ рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдо, рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд╛рд▓ рдХреА рдорд╛рддреНрд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдШрдЯрдХ рдПрдХ рдмрдЯрди рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЦрд░реАрджрд╛рд░ рдХреЛ рдЯреЛрдХрд░реА рдореЗрдВ рд╕рд╛рдорд╛рди рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж product.stock рдХреЗ рдореВрд▓реНрдп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ:

  • рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди (рдореНрдпреВрдЯреЗрд╢рди) рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореВрд▓ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
  • рдпрд╣ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХрдЯрди рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╡реНрдпрд╡рд╣рд╛рд░, рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рд╣рдо product рдШрдЯрдХ рдореЗрдВ рдХреБрдЫ рддрд░реНрдХ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╢рд╛рдпрдж рдЗрд╕рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореВрд▓ рдШрдЯрдХ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИред

 <template>   <Product :product="product" @add-to-cart="addProductToCart(product)"></Product> </template> import Product from "./components/Product"; export default {  name: "App",  components: {    Product  },  data() {    return {      product: {        name: "Laptop",        price: 1250,        stock: 2      }    };  },  methods: {    addProductToCart(product) {      if (product.stock > 0) {        product.stock--;      }    }  } }; 

рдЗрд╕ рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕реЛрдЪ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреА рд╣реИ: "рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░, рдореБрдЭреЗ addProductToCart рд╡рд┐рдзрд┐ рдореЗрдВ product.stock рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ addProductToCart " рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдЫреЛрдЯреА рд╕реА рдЧрд▓рддреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЕрдм рдмрдЯрди рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рд▓ рдХреА рдорд╛рддреНрд░рд╛ 1 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛрдЧреА, рдмрд▓реНрдХрд┐ 2 рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рдРрд╕рд╛ рдЪреЗрдХ рдХреЗрд╡рд▓ рджреБрд░реНрд▓рдн рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдЫреВрдЯ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдХреЛрдб рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдЙрддреНрдкрд╛рдж рдХреА 1 рдкреНрд░рддрд┐ рдХреЗ рдмрдЬрд╛рдп, 2 рдкреНрд░рддрд┐рдпрд╛рдВ рдЦрд░реАрджреЗрдВрдЧреЗред

рдпрджрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдЖрдкрдХреЛ рдЕрд╕рдВрдмрджреНрдз рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░реЗ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдЗрд╕реЗ рд╡рд╣ рдлрд╝реЙрд░реНрдо рд╣реЛрдиреЗ рджреЗрдВ рдЬрд┐рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднрд░рддрд╛ рд╣реИред рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ user рдХреЗ рд╕рд╛рд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ user рдХреЗ рдирд╛рдо рдФрд░ рдИрдореЗрд▓ рдкрддреЗ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдб "рд╕рд╣реА" рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред

 //   <template>  <div>    <span> Email {{user.email}}</span>    <span> Name {{user.name}}</span>    <user-form :user="user" @submit="updateUser"/>  </div> </template> import UserForm from "./UserForm" export default {  components: {UserForm},  data() {   return {     user: {      email: 'loreipsum@email.com',      name: 'Lorem Ipsum'     }   }  },  methods: {    updateUser() {     //            }  } } //   UserForm.vue <template>  <div>   <input placeholder="Email" type="email" v-model="user.email"/>   <input placeholder="Name" v-model="user.name"/>   <button @click="$emit('submit')">Save</button>  </div> </template> export default {  props: {    user: {     type: Object,     default: () => ({})    }  } } 

v-model рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ user рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред Vue.js рдпрд╣ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЛ:

  • рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рд░рджреНрдж рдХрд░реЗрдВ рдмрдЯрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░рджреНрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
  • рдпрджрд┐ рд╕рд░реНрд╡рд░ рдХреЙрд▓ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдП рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? user рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреВрд░реНрд╡рд╡рдд рдХреИрд╕реЗ рдХрд░реЗрдВ?
  • рдХреНрдпрд╛ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╛рдо рдФрд░ рдИрдореЗрд▓ рдкрддрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рд╕рдорд╕реНрдпрд╛ рдХреЛ "рдареАрдХ" рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ user рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛рдП:

 <user-form :user="{...user}"> 

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ UserForm рдШрдЯрдХ рдХрд╛ рдЕрдкрдирд╛ рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рд╣рдо рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 <template>  <div>   <input placeholder="Email" type="email" v-model="form.email"/>   <input placeholder="Name" v-model="form.name"/>   <button @click="onSave">Save</button>   <button @click="onCancel">Save</button>  </div> </template> export default {  props: {    user: {     type: Object,     default: () => ({})    }  },  data() {   return {    form: {}   }  },  methods: {   onSave() {    this.$emit('submit', this.form)   },   onCancel() {    this.form = {...this.user}    this.$emit('cancel')   }  }  watch: {    user: {     immediate: true,     handler: function(userFromProps){      if(userFromProps){        this.form = {          ...this.form,          ...userFromProps        }      }     }    }  } } 

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдб рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо user рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди ( watch ) рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ form рдбреЗрдЯрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдЕрдм рдлреЙрд░реНрдо рдХреА рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдФрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

  • рдЖрдк рдкреНрд░рдкрддреНрд░ рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреВрд░реНрд╡рд╡рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣ this.form = {...this.user} ред
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░рд╛рдЬреНрдп рд╣реИред
  • рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШрдЯрдирд╛ рдореЗрдВ рдореВрд▓ рдШрдЯрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдЬрдм рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдореВрд▓ рдШрдЯрдХреЛрдВ рддрдХ рд╕реАрдзреА рдкрд╣реБрдБрдЪ


рдпрджрд┐ рдХреЛрдИ рдШрдЯрдХ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рд╕реЗ рдЕрд╕рдВрдЧрддрддрд╛рдПрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрд╡реЗрджрди рдХрд╛ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдПрдХ рдШрдЯрдХ рдЬреЛ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рдореЗрдиреВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ dropdown рдШрдЯрдХ (рдорд╛рддрд╛ dropdown-menu рдкрд┐рддрд╛) рдФрд░ рдПрдХ dropdown-menu рдШрдЯрдХ (рдмрдЪреНрдЪрд╛) рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореЗрдиреВ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ dropdown-menu рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдШрдЯрдХ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдФрд░ рджрд┐рдЦрд╛рдирд╛ dropdown рдХреЗ рдореВрд▓ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

 // Dropdown.vue ( ) <template>  <div>    <button @click="showMenu = !showMenu">Click me</button>    <dropdown-menu v-if="showMenu" :items="items"></dropdown-menu>  </div> <template> export default {  props: {   items: Array  },  data() {   return {     selectedOption: null,     showMenu: false   }  } } // DropdownMenu.vue ( ) <template>  <ul>    <li v-for="item in items" @click="selectOption(item)">{{item.name}}</li>  </ul> <template> export default {  props: {   items: Array  },  methods: {    selectOption(item) {     this.$parent.selectedOption = item     this.$parent.showMenu = false    }  } } 

selectOption рд╡рд┐рдзрд┐ рдкрд░ рдзреНрдпрд╛рди selectOption ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдРрд╕рд╛ рдмрд╣реБрдд рдХрдо рд╣реА рд╣реЛрддрд╛ рд╣реИ, рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╕реАрдзреЗ рддреМрд░ рдкрд░ $parent рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕ рдЗрдЪреНрдЫрд╛ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреЛрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдЖрдк рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдпрджрд┐ рд╣рдо showMenu рдпрд╛ selectedOption рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрджрд▓ рджреЗрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдбреНрд░реЙрдкрдбрд╛рдЙрди рдореЗрдиреВ рдмрдВрдж рдирд╣реАрдВ рд╣реЛ рдкрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдХрд┐рд╕реА рднреА рдЖрдЗрдЯрдо рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП dropdown-menu рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

 // Dropdown.vue ( ) <template>  <div>    <button @click="showMenu = !showMenu">Click me</button>    <transition name="fade">      <dropdown-menu v-if="showMenu" :items="items"></dropdown-menu>    </dropdown-menu>  </div> <template> 

$parent рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдХреЛрдб, рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред dropdown рдШрдЯрдХ рдЕрдм dropdown-menu рдХрд╛ рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рдЕрдм dropdown-menu рдкреИрд░реЗрдВрдЯ transition рдШрдЯрдХ рд╣реИред

рдЧреБрдгреЛрдВ рдХреЛ рдШрдЯрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдиреАрдЪреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрд░реНрде рд╣реИред рдпрд╣рд╛рдВ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

 // Dropdown.vue ( ) <template>  <div>    <button @click="showMenu = !showMenu">Click me</button>    <dropdown-menu v-if="showMenu" :items="items" @select-option="onOptionSelected"></dropdown-menu>  </div> <template> export default {  props: {   items: Array  },  data() {   return {     selectedOption: null,     showMenu: false   }  },  methods: {    onOptionSelected(option) {      this.selectedOption = option      this.showMenu = true    }  } } // DropdownMenu.vue ( ) <template>  <ul>    <li v-for="item in items" @click="selectOption(item)">{{item.name}}</li>  </ul> </template> export default {  props: {   items: Array  },  methods: {    selectOption(item) {     this.$emit('select-option', item)    }  } } 

рдЕрдм, рдШрдЯрдирд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдмрд╛рд▓ рдШрдЯрдХ рдЕрдм рдореВрд▓ рдШрдЯрдХ рд╕реЗ рдмрд╛рдзреНрдп рдирд╣реАрдВ рд╣реИред рд╣рдо рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдирд┐рдореЗрдЯреЗрдб рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдореВрд▓ рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдмрд╕ рдЗрд╕ рдШрдЯрдХ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, dropdown рдШрдЯрдХ рдЦреБрдж рд╣реА рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЛ рдХреИрд╕реЗ рдЪреБрдирдирд╛ рд╣реИ рдФрд░ рдореЗрдиреВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдХреЛрдб рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред "рд╕рд░рд▓ рдФрд░ рддреНрд╡рд░рд┐рдд" рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд┐рдХрд╛рд╕ рддрдХрдиреАрдХреЗрдВ рдЕрдХреНрд╕рд░ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реЛрддреА рд╣реИрдВред рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзреИрд░реНрдп рдФрд░ рд╕рдордп рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдпрд╣ Vue.js. рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХреЛрдИ рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ?

Source: https://habr.com/ru/post/hi463327/


All Articles