Vue: @click рдИрд╡реЗрдВрдЯ рдЕрдиреНрдп vnode @click рдИрд╡реЗрдВрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рд╕рд┐рддре░ 2017  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vuejs/vue

рд╕рдВрд╕реНрдХрд░рдг

2.4.2

рдкреНрд░рдЬрдирди рд▓рд┐рдВрдХ

https://jsbin.com/qejofexedo/edit?html , js, output

рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛

рдкреНрд░рдЬрдирди рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВред

рдХреНрдпрд╛ рдЙрдореНрдореАрдж рд╣реИ?

рдЬрдм рдореИрдВ Expand is True рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдБ, рддреЛ expand false ред рдФрд░ рдХреЗрд╡рд▓ countA рдмрджрд▓ рдЧрдПред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рдЬрдм рдореИрдВ Expand is Ture рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖред
countA рдФрд░ countB рдмрджрд▓ рдЧрдПред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ expand рдмрджрд▓рдХрд░ false , рд▓реЗрдХрд┐рди рддрддреНрдХрд╛рд▓ рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдФрд░ vnode click event рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдмрджрд▓рдХрд░ true ред

рдФрд░ рдЕрдзрд┐рдХ

  • рдЕрдЧрд░ рдореИрдВ рджреВрд╕рд░реЗ рдЯреИрдЧ рдирд╛рдо рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ p , section рдХрд░реВрдВ, рддреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
  • рдЕрдЧрд░ рдореИрдВ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдШрдЯрдирд╛ рдХреЛ i рдЯреИрдЧ рд╕реЗ рдЬрдирдХ div рдкреНрд░рдердо рдЯреИрдЧ рдореЗрдВ рдЯреИрдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рдКрдВ, рддреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рддреЛ, рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  • рдЕрдЧрд▓реЗ рдХреНрд▓рд┐рдХ рдкрд░ ( <i> рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ) рдкрд░ <i> рдЖрдЧ рдкрд░ рдЖрдВрддрд░рд┐рдХ рдХреНрд▓рд┐рдХ рдШрдЯрдирд╛
  • рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдШрдЯрдирд╛ рдмреБрд▓рдмреБрд▓реЗ рд╕реЗ рдмрд╛рд╣рд░реА div рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдП ред рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдХреНрд▓рд┐рдХ рд╢реНрд░реЛрддрд╛ рдмрд╛рд╣рд░реА div рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдХреНрдпреЛрдВрдХрд┐ DOM рд╕рдВрд░рдЪрдирд╛ рд╕рдорд╛рди рд╣реИ, рдмрд╛рд╣рд░реА div рдФрд░ рдЖрдВрддрд░рд┐рдХ рддрддреНрд╡ рджреЛрдиреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдШрдЯрдирд╛ рдЕрдВрдд рдореЗрдВ рдмрд╛рд╣рд░реА div рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИ, 1 рдЕрдкрдбреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рд╢реНрд░реЛрддрд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ, рдмрджрд▓реЗ рдореЗрдВ 2 рдЕрдкрдбреЗрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдкреЗрдЪреАрджрд╛ рд╣реИ, рдФрд░ рдЕрджреНрдпрддрди рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдХрд╛рдореЛрдВ рдореЗрдВ рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдИрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рд╕рдВрднрд╡рддрдГ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдХрд╛рд░рдг)ред

рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рджреЛ рдмрд╛рд╣рд░реА рдбрд┐рд╡реАрдЬрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреБрдВрдЬреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рд╕реЗ рдмреБрджрдмреБрджрд╛рддреА рд╣реБрдИ рдШрдЯрдирд╛ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛:

<div class="header" v-if="expand" key="1"> // block 1
  <i @click="expand = false, countA++">Expand is True</i> // element 1
</div>
<div class="expand" v-if="!expand" @click="expand = true, countB++" key="2"> // block 2
  <i>Expand is False</i> // element 2
</div>

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

qq20170911-185025
рд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрддрд╛ рд╣реИ

рдЖрдкрдХрд╛ рд░рд┐рдкреНрд░реЛ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ...

@Kingwl @ yyx990803 рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд╛рдкрд╕ рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдпрд╛ рд╣реВрдВред

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рд╣реИ

<div class="header" v-if="expand"> // block 1
  <i @click="expand = false, countA++">Expand is True</i> // element 1
</div>
<div class="expand" v-if="!expand" @click="expand = true, countB++"> // block 2
  <i>Expand is False</i> // element 2
</div>

рдЪрд╛рд░ рдорд╛рдорд▓рд╛ рд╣реИ:

  • рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рд╕реБрди block 1 рдФрд░ block2 , рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  • рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рд╕реБрди element 1 рдФрд░ element 2 , рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
  • рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рд╕реБрди block 1 рдФрд░ element 2 , expand рдХреЛ рд╕рд╣реА рдкрд░ рдмрджрд▓реЗрдВ рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред
  • рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рд╕реБрди element 1 рдФрд░ block 2 , expand рдХреЛ рдЧрд▓рдд рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди expand рдХреЛ рд╕рдЪ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐:

  • рдЕрдЧрд▓реЗ рдХреНрд▓рд┐рдХ рдкрд░ ( <i> рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ) рдкрд░ <i> рдЖрдЧ рдкрд░ рдЖрдВрддрд░рд┐рдХ рдХреНрд▓рд┐рдХ рдШрдЯрдирд╛
  • рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдШрдЯрдирд╛ рдмреБрд▓рдмреБрд▓реЗ рд╕реЗ рдмрд╛рд╣рд░реА div рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдП ред рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди, рдПрдХ рдХреНрд▓рд┐рдХ рд╢реНрд░реЛрддрд╛ рдмрд╛рд╣рд░реА div рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдХреНрдпреЛрдВрдХрд┐ DOM рд╕рдВрд░рдЪрдирд╛ рд╕рдорд╛рди рд╣реИ, рдмрд╛рд╣рд░реА div рдФрд░ рдЖрдВрддрд░рд┐рдХ рддрддреНрд╡ рджреЛрдиреЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рдШрдЯрдирд╛ рдЕрдВрдд рдореЗрдВ рдмрд╛рд╣рд░реА div рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИ, 1 рдЕрдкрдбреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рд╢реНрд░реЛрддрд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреА рд╣реИ, рдмрджрд▓реЗ рдореЗрдВ 2 рдЕрдкрдбреЗрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдкреЗрдЪреАрджрд╛ рд╣реИ, рдФрд░ рдЕрджреНрдпрддрди рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдХрд╛рдореЛрдВ рдореЗрдВ рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдИрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рд╕рдВрднрд╡рддрдГ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдХрд╛рд░рдг)ред

рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рджреЛ рдмрд╛рд╣рд░реА рдбрд┐рд╡реАрдЬрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреБрдВрдЬреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рд╕реЗ рдмреБрджрдмреБрджрд╛рддреА рд╣реБрдИ рдШрдЯрдирд╛ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛:

<div class="header" v-if="expand" key="1"> // block 1
  <i @click="expand = false, countA++">Expand is True</i> // element 1
</div>
<div class="expand" v-if="!expand" @click="expand = true, countB++" key="2"> // block 2
  <i>Expand is False</i> // element 2
</div>
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕