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

рдЗрд╕реЗ рдЦреБрдж рдХреНрдпреЛрдВ рд▓рд┐рдЦреЗрдВ?
рдХрдИ рд▓реЛрдЧ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ - рдРрд╕рд╛ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдиреБрдХреНрд╕рдЯ , рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░реЗрдЧрд╛? рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдореИрдВрдиреЗ рднреА рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдпрд╣ рдмреЗрдорд╛рдиреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рдиреЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд╕рд┐рд░ рдкрд░ рдмрд░реНрдл рдХреА рддрд░рд╣ рдЧрд┐рд░рддреА рд╣реИрдВред рдФрд░ рд╡рд╣рд╛рдВ рдврд╛рдВрдЪреЗ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ - рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЦрд░реЛрдВрдЪ рд╕реЗ рдХрд░реЗрдВред
рдкреНрд░реЗрд░рдХ
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрдЧрдарди рдХреЗ рдЖрдпреЛрдЬрдХ Nuxt рдереЗред рдпрд╣ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ Vue рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
Nuxt рдореЗрдВ рдПрдХ рдмрдврд╝рд┐рдпрд╛ рдлреАрдЪрд░ рд╣реИ- рдкреНрд▓рдЧрдЗрдиреНрд╕ред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреА рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рддреЗ рд╕рдордп рдФрд░ рд╕рд╛рде рд╣реА рдкреВрд░реЗ
рд╕реНрдЯреЛрд░ рдкрд░ Vue рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛,
inject
рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ Vue рдХреЗ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдФрд░
store
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рднрдВрдбрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред
рдпрд╣ рдХрд╣рд╛рдВ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ?
рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐
main.js
рдХрд╛рдлреА рд╡рдЬрди рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЖрдкрдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрдпрд╛рдд рдХреЗ рдмрд┐рдирд╛ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╣реАрдВ рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдЧрд╛ред
рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рдЙрджрд╛рд╣рд░рдг
рд╡реАрдпреВ-рд░рд╛рдЙрдЯрд░ рд╣реИ ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдмрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡рд░реНрддрдорд╛рди рдорд╛рд░реНрдЧ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдореЗрдВ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдП? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрд╕рдХрд╛ рд░рд╛рдЬреНрдп рднреА рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ
, рдкреНрд░рддрд┐рдХреНрд╖рдг ред рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЖрдЧреЗ
$wait
рд╡реЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рди рдХреЗрд╡рд▓ Vue рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЬреЛрдбрд╝рд╛, рдмрд▓реНрдХрд┐ vuex рд╕реНрдЯреЛрд░ рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ред рдкреНрд▓рдЧрдЗрди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреЛрд░ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдХрдИ рдШрдЯрдХреЛрдВ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдХреБрдЫ рддрддреНрд╡ рдкрд░ рд▓реЛрдбрд░ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╢рди рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ
$wait.start('action')
рдФрд░
$wait.end('action')
рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХреНрд╢рди рдореЗрдВ рд╣реА рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдпрд╣
dispatch('wait/start', 'action' {root: true})
рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрдардиреАрдп рдФрд░ рдХрдо
dispatch('wait/start', 'action' {root: true})
ред рд╕реНрдЯреЛрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪреАрдиреА рд╣реИред
рд╢рдмреНрджреЛрдВ рд╕реЗ рд▓реЗрдХрд░ рдХреЛрдб рддрдХ
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдореВрд▓ рд╕рдВрд░рдЪрдирд╛
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдм рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ:
src
- store
- App.vue
- main.js
main.js
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
import Vue from 'vue'; import App from './App.vue'; import store from './store'; new Vue({ render: h => h(App), store }).$mount('#app');
рд╣рдо рдкрд╣рд▓реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
рдЕрдм рд╣рдо
axios рдХреЛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ Nuxt рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд┐рдпрд╛ рдФрд░
src
рдореЗрдВ рдПрдХ
plugins
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдИред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░
index.js
рдФрд░
axios.js
ред
src
- plugins
-- index.js
-- axios.js
- store
- App.vue
- main.js
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣рдо рд╕реНрдЯреЛрд░ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ
inject
рдлрд╝рдВрдХреНрд╢рдиред
axios.js
import axios from 'axios'; export default function (app) {
index.js
:
import Vue from 'vue'; import axios from './axios'; export default function (app) { let inject = () => {};
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ,
index.js
рдлрд╝рд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреА рд╣реИред рдпрд╣
app
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм
main.js
рдмрджрд▓реЗрдВ рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
main.js
:
import Vue from 'vue'; import App from './App.vue'; import store from './store'; import initPlugins from './plugins';
рдкрд░рд┐рдгрд╛рдо
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдордиреЗ рдпрд╣ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдкреНрд▓рдЧрдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ
main.js
рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рд╣реИред
рд╡реИрд╕реЗ, рд╣рдорд╛рд░реЗ рд╕рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП
app
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рдЕрдВрджрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдЯреЛрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХреЙрд▓
commit
,
dispatch
рдХреЗ рд╕рд╛рде-рд╕рд╛рде
store.state
рдФрд░
store.getters
рддрдХ рдкрд╣реБрдБрдЪ
store.state
рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк ES6- рд╢реИрд▓реА рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
axios.js
import axios from 'axios'; export default function ({store: {dispatch, commit, state, getters}}) { ... }
рджреВрд╕рд░рд╛ рдЪрд░рдг - рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд▓рдЧрдЗрди рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдм рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
src
- plugins
-- index.js
-- axios.js
- store
- App.vue
- main.js
рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ,
Vue.use
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИ, рд╣рдо рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рд░рд▓ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдПрдВрдЧреЗред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛ
vue-wait
рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢
vue-wait
ред рдпрд╣ рдПрдХ рднрд╛рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд▓реЛрдбрд░ рдХреЛ рдПрдХ рдмрдЯрди рдкрд░ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдФрд░ рдЗрд╕рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрд╕рдХреА рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕рд┐рдирд┐рдЯрд┐рдХ рд╢реБрдЧрд░ рднреА рд╢рд╛рдорд┐рд▓ рдереАред
рдкреНрд▓рдЧрдЗрди рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
plugins
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ -
wait.js
рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ vuex рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ
wait
рднреА рдХрд╣рд╛ рд╣реИред рд╡рд╣ рддреАрди рд╕рд░рд▓ рдХрджрдо рдХрд░рддрд╛ рд╣реИ:
-
start
-
action
рдХреА рд╕реНрдЯреЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ
action
рдЯреВ рд╕реЗрдЯ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛
true
-
end
- рд░рд╛рдЬреНрдп рд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реИ рдПрдХ
action
рдирд╛рдордХ рд╡рд╕реНрддреБ рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐
-
is
- рд░рд╛рдЬреНрдп рд╕реЗ
action
рдирд╛рдордХ рдПрдХ рд╡рд╕реНрддреБ рдХреА рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛
action
рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
wait.js
export default function ({store: {dispatch, getters}}, inject) { const wait = { start: action => dispatch('wait/start', action), end: action => dispatch('wait/end', action), is: action => getters['wait/waiting'](action) }; inject('wait', wait); }
рдФрд░ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХрдиреЗрдХреНрдЯ:
index.js
:
import Vue from 'vue'; import axios from './axios'; import wait from './wait'; export default function (app) { let inject = () => {}; Injection axios(app, inject); wait(app, inject); }
рдХрд╛рд░реНрдп рдЗрдВрдЬреЗрдХреНрд╖рди
рдЕрдм рд╣рдо
inject
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
Vue.prototype рдХрд╛ рдЬрд╛рджреВ
рдЕрдм рдЬрд╛рджреВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
Vue рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣
Vue.prototype.$appName = ' ';
рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
Vue.prototype.$appName = ' ';
рдФрд░
$appName
рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЧреБрдЧреНрд▓рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЬрд╡рд╛рдм рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдиреЗ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓реЗрдЦрдХреЛрдВ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред
рд╡реИрд╢реНрд╡рд┐рдХ рдорд┐рд╢реНрд░рдг
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ
vue-wait
plugin рдХреЛрдб рдХреЛ рджреЗрдЦрд╛ред рд╡реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ (рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд╕рд╛рдл рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
Vue.mixin({ beforeCreate() { const { wait, store } = this.$options; let instance = null; instance.init(Vue, store);
рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдорд┐рд╢реНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдкреНрд░рднрд╛рд╡ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реИ, рд╢рд╛рдпрдж, рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣рд╛рдВ рд╕реНрдЯреЛрд░ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЕрдЧрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк?
inject
рдлрд╝рдВрдХреНрд╢рди
inject
рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рдорд╛рдзрд╛рди рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ Nuxt рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рдорд┐рд╢реНрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдмрд╕ рдЧрдпрд╛ред
Vue.use(() => {
рдкрд░рд┐рдгрд╛рдо
рдЗрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИ
this.$wait
рдХрд┐рд╕реА рднреА рдШрдЯрдХ рд╕реЗ
this.$wait
, рд╕рд╛рде рд╣реА рд╕реНрдЯреЛрд░ рдореЗрдВ рдХреЛрдИ рднреА рд╡рд┐рдзрд┐ред
рдХреНрдпрд╛ рд╣реБрдЖ?
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛:
src
- plugins
-- index.js
-- axios.js
-- wait.js
- store
- App.vue
- main.js
index.js
:
import Vue from 'vue'; import axios from './axios'; import wait from './wait'; export default function (app) { let inject = (name, plugin) => { let key = `$${name}`; app[key] = plugin; app.store[key] = plugin; Vue.use(() => { if (Vue.prototype.hasOwnProperty(key)) { return; } Object.defineProperty(Vue.prototype, key, { get () { return this.$root.$options[key]; } }); }); }; axios(app, inject); wait(app, inject); }
wait.js
export default function ({store: {dispatch, getters}}, inject) { const wait = { start: action => dispatch('wait/start', action), end: action => dispatch('wait/end', action), is: action => getters['wait/waiting'](action) }; inject('wait', wait); }
axios.js
import axios from 'axios'; export default function (app) { axios.defaults.baseURL = process.env.API_BASE_URL; axios.defaults.headers.common['Accept'] = 'application/json'; axios.defaults.headers.post['Content-Type'] = 'application/json'; }
main.js
:
import Vue from 'vue'; import App from './App.vue'; import store from './store'; import initPlugins from './plugins'; const app = { render: h => h(App), store }; initPlugins(app); new Vue(app).$mount('#app');
рдирд┐рд╖реНрдХрд░реНрд╖
рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ
main.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЖрдпрд╛рдд рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдорд┐рд▓рд╛ред рдФрд░ рдЕрдм рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧрдЗрди рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИред
рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреА рд╣реИ, рдЗрд╕реЗ
index.js
рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИред
рдореЗрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рд╛рдмрд┐рдд рд╣реБрдИ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд░рдиреЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдХреЛрдИ рджрд░реНрдж рдирд╣реАрдВ рд╣реИред
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рд╕рдлрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ!