рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдПрдБ

рд╣рдо Ptah рдЯреАрдо рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдПрд╕рдкреАрдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ Vue рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдФрд░ рдЕрдм рд╣рдо рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

рд░реЗрдВрдбрд░ рдХрд╛рд░реНрдп


рдХрдВрдкреЛрдиреЗрдВрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреНрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╕рд░рд▓ рдФрд░ рддрд╛рд░реНрдХрд┐рдХ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд░реВрдкрд░реЗрдЦрд╛ рдореЗрдВ рдХрдо рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛ рд╣реИред рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рд╕реБрдВрджрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП 90% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рд╢реЗрд╖ 10% рдореЗрдВ рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдШрдЯрдХ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ? рд░реЗрдВрдбрд░ рдлрдВрдХреНрд╢рди рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧрд╛ред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рд╣реИ:

Vue.component('anchored-heading', {
 render: function (createElement) {
   return createElement(
     'h' + this.level,   //  
     this.$slots.default //   
   )
 },
 props: {
   level: {
     type: Number,
     required: true
   }
 }
})

рдПрдВрдХрд░рд┐рдВрдЧ-рд╣реЗрдбрд┐рдВрдЧ рдШрдЯрдХ рд╕реНрддрд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╢реАрд░реНрд╖рдХ рдЯреИрдЧ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ

<anchored-heading :level="1">, !</anchored-heading>

рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

<h1>, !</h1>

рдпрджрд┐ рдЗрд╕ рдШрдЯрдХ рдХреЛ рдПрдХ рдорд╛рдирдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЗрд╕рдореЗрдВ 6 v-if рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА рдЬреЛ рд╣реЗрдбрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИрдВ:

<h1 v-if="level === 1">
 <slot></slot>
</h1>
<h2 v-if="level === 2">
 <slot></slot>
</h2>
<h3 v-if="level === 3">
 <slot></slot>
</h3>
<h4 v-if="level === 4">
 <slot></slot>
</h4>
<h5 v-if="level === 5">
 <slot></slot>
</h5>
<h6 v-if="level === 6">
 <slot></slot>
</h6>

рдпрд╣ рдХрд╛рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ?


рд░реЗрдВрдбрд░ рдореЗрдердб рджреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред CreateElement рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ Vue рддрддреНрд╡ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдореБрджрд╛рдп рдореЗрдВ, рдпрд╣ рдПрдХ рдкрддреНрд░ - рдПрдЪ рдХреЗ рд▓рд┐рдП createElement рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдерд╛рдЧрдд рд╣реИ ред рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╣реИ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП,ред createElement рддреАрди рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ:



  1. рдмрдирд╛рдиреЗ рдХреА рд╡рд╕реНрддреБред рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ HTML рдЯреИрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдШрдЯрдХ рдирд╛рдо рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
  2. рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБред рдЗрд╕рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ, рд╢реИрд▓рд┐рдпреЛрдВ, рдШрдЯрдХ рдХреЗ рдЗрдирдкреБрдЯ рдЗрдирдкреБрдЯ, рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдЖрджрд┐ рдХреА рд╕реВрдЪреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ;
  3. рдмрд╛рд▓ рдЖрднрд╛рд╕реА рдиреЛрдбреНрд╕ред рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдПрдХ рд╕рд░рдгреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ $ рд╣реИ ред

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

Vue.component('v-style', {
 render: function (h) {
   return h('style', this.$slots.default)
 }
})

рдЕрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░, рд╕реНрдЯрд╛рдЗрд▓ рдЯреИрдЧ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╡реА-рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

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

mixins


рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрдИ рд╕рдорд╛рди рдШрдЯрдХ рд╣реИрдВ? рдорд┐рдХреНрд╕реА рдпрд╛ рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдВ DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреА - рдорд┐рд╢реНрд░рдг рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реЗрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рддрд░реНрдХ рд╡рд╛рд▓реЗ 2 рдШрдЯрдХ рд╣реИрдВ:

export default  {
  name: 'TextElement',

  data () {
    return {
      elementName: 'Text',
      showEditor: false,
      editor: null
    }
  },
  
  methods: {
    initEditor () {
      this.showEditor = true
      this.editor = new Editor(this.elementName)
    }
  }
}

export default  {
  name: 'ButtonElement',

  data () {
    return {
      elementName: 'Button',
      showEditor: false,
      editor: null
    }
  },
  
  methods: {
    initEditor () {
      this.showEditor = true
      this.editor = new Editor(this.elementName)
    }
  }
}

рдШрдЯрдХ рдЕрд▓рдЧ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рддрд░реНрдХ рд╣реИред рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреА рд╣реЛрдЧреАред рдШрдЯрдХреЛрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдЗрд╕реЗ рдорд┐рдХреНрд╕рд┐рдВрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд░рдЦрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ ред

// mixin.js
export default  {
  data () {
    return {
      showEditor: false,
      editor: null
    }
  },
  
  methods: {
    initEditor () {
      this.showEditor = true
      this.editor = new Editor(this.elementName)
    }
  }
}

// TextElement.vue
import mixin from './mixins/mixin'

export default  {
  name: 'TextElement',

  mixins: [mixin]  //  

  data () {
    return {
      elementName: 'Text',
    }
  },
}

// ButtonElement.vue
import mixin from './mixins/mixin'

export default  {
  name: 'ButtonElement',

  mixins: [mixin]

  data () {
    return {
      elementName: 'Button'
    }
  }
}

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

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

рдкреНрд░рджрд╛рди / рдЗрдВрдЬреЗрдХреНрд╢рди


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

рдпрд╣ рдХрд╛рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдореВрд▓ рдШрдЯрдХ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ рдкрд░ рдкрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

// Parent.vue        
export default {
  provide: {
   device: 'is-desktop'
  }
}

рдЕрдм рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рдмрдЪреНрдЪреЗ рдХреЗ рдШрдЯрдХ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

// Child.vue    
export default {
  inject: ['device'],

  created () {
   console.log(this.device) // => "is-desktop"
  }
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдЗрдирд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдкреНрд░рджрд╛рди / рдЗрдВрдЬреЗрдХреНрд╢рди рдмрдВрдбрд▓ рд╕реЗ рдбреЗрдЯрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдирд╣реАрдВ рд╣реИ! рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдЦрд╛рдореА рдХреЛ Object.defineProperty рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ :

provide () {
 let device = {}
 Object.defineProperty(device, 'type', { enumerable: true, get: () => this.device })
 return { device }
},

data () {
 return {
   device: 'is-desktop'
 }
}

рдЕрдм рдмрджрд▓ рд░рд╣рд╛ рд╣реИ this.device рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рд╡рдВрд╢ рдореЗрдВ рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред

рдШрдЯрдХ рдореЗрдЯрд╛


рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрдм рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдХрд┐рд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╕рдВрдкрд╛рджрдХ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдХрд╛рд░реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдХреА рд╕рд╢рд░реНрдд рдЦрдВрдб рдореЗрдВ FirstScreen, рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдкрд╛рда, рд▓реЛрдЧреЛ, рдмрдЯрди рддрддреНрд╡реЛрдВ, рддреЛ рдЬреЛрдбрд╝рдиреЗ SocialIcons рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ ред

рддреЛ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдиреБрднрд╛рдЧ рдШрдЯрдХ рд╣реЛрдЧрд╛ рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП 4 рдШрдЯрдХ рд╕реНрд╡рдпрдВред рд╕рдВрд░рдЪрдирд╛ рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

/ sections
 -- FirstScreen.vue
/ elements
 -- Text.vue
 -- Logo.vue
 -- Button.vue
 -- SocialIcons.vue

рдлрд░реНрд╕реНрдЯрд╕реНрдХреНрд░реАрди рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП , рдФрд░ рдлрд┐рд░ рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдирд╛рд╕рдордЭ рдирд┐рд░реНрдгрдп рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдг рд╣реИ:

<component :is="%componentName%"/>

рдХреЗ рд╕рд╛рде рдШрдЯрдХ рддрддреНрд╡ рд╣реИ : рд╡рд┐рд╢реЗрд╖рддрд╛ , рдЬреЛ рдмрд╕ рдШрдЯрдХ рдХрд╛ рдирд╛рдо рд▓рд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдмрд╕ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ:

<script>
export default  {
  name: 'FirstScreen',

  data () {
    return {
      elements: [
        'Text',
        'Logo',
        'Button',
      ],
    }
  }
}
</script>

<template>
  <div class="first-screen">
    <component v-for="element in elements" :is="element"/>
  </div>
</template>

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

All Articles