Articles translated from
Reference source
- Vue.js: 複数 の ク ラ ス を バ イ ン デ ィ ン グ す る 場合 ど の よ う な 書 き 方 が あ る か
- The difference between COMPUTED and METHODS in Vue.js
- vuejs.org
The learning content includes:
- Vue JS 2 – The Complete Guide course (incl. Vue Router & Vuex) on Udemy (85h)
- Code practice (15h)
Levels required before starting, have knowledge of javascipt, jquery. Previously learned about Reactjs
Basic syntax of Vue.js
Basic Syntax of Vuejs ## Vue.js instance Vue.js instance is initialized in following syntax
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token comment">//app.js</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> el <span class="token operator">:</span> <span class="token string">"#app"</span> <span class="token punctuation">,</span> data <span class="token operator">:</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">"Kei"</span> <span class="token punctuation">,</span> age <span class="token operator">:</span> <span class="token string">"30"</span> <span class="token punctuation">,</span> counter <span class="token operator">:</span> <span class="token number">0</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function-variable function">increase</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> counter <span class="token operator">+=</span> <span class="token number">1</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
app.js is imported with the vue.js file into the html template file
1 2 3 4 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> https://cdn.jsdelivr.net/npm/ <a class="__cf_email__" href="/cdn-cgi/l/email-protection">[email protected]</a> /dist/vue.js <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token attr-name">src</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> app.js <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> |
{{}}
The above syntax is used to call the properties of the Vue instance
1 2 3 | <span class="token comment">//html</span> <span class="token operator"><</span> p <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> name <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> p <span class="token operator">></span> |
v-bind
When you want to assign dynamic values to attributes of html tags
1 2 3 | <span class="token comment">//html</span> <span class="token operator"><</span> a v <span class="token operator">-</span> bind <span class="token operator">:</span> href <span class="token operator">=</span> <span class="token string">"link"</span> <span class="token operator">></span> Google <span class="token operator"><</span> <span class="token operator">/</span> a <span class="token operator">></span> |
v-one
Written inside html tag, used to print fixed value (no possibility to change, print out 1 time at component load)
1 2 3 | <span class="token comment">//html</span> <span class="token operator"><</span> h1 v <span class="token operator">-</span> once <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> title <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> h1 <span class="token operator">></span> |
v-html
Used when printing the value in html
1 2 3 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token attr-name">v-html</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> finishedLink <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> |
v-on
Register the event handler function
1 2 3 | //html <span class="token operator"><</span> button v-on:click <span class="token operator">=</span> <span class="token string">"increase(2, <span class="token variable">$event</span> )"</span> <span class="token operator">></span> Click me <span class="token operator"><</span> /button <span class="token operator">></span> |
1 2 3 4 5 6 7 8 9 | <span class="token comment">//app.js</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function-variable function">increase</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">step <span class="token punctuation">,</span> event</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> counter <span class="token operator">+=</span> step <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
v-on:click=“counter++”
Can write js code inline, in code, not if or for Also can be written as v-on:keyup.enter.space
(when press enter ??)
v-model
Used to bind data to html tags that refer to the properties of the vue instance
1 2 3 4 5 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> input</span> <span class="token attr-name">type</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> text <span class="token punctuation">"</span></span> <span class="token attr-name">v-model</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> name <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token punctuation">></span></span> { { name }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> <span class="token comment"><!-- 入力値によって動的に name が変わる --></span> |
1 2 3 4 5 6 7 8 | <span class="token comment">//app.js</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> el <span class="token operator">:</span> <span class="token string">"#app"</span> <span class="token punctuation">,</span> data <span class="token operator">:</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">"Kei"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
@
Short spelling of v-on:
@click="link"
Instead of v-bind
: can also write :
##: class Assign dynamic class attribute for html tag
1 2 3 4 5 6 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> demo <span class="token punctuation">"</span></span> <span class="token attr-name">@click</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> attachedRed = !attachedRed <span class="token punctuation">"</span></span> <span class="token attr-name">:class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> {red: attachedRed} <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> |
You can use an array to assign multiple class names
1 2 3 4 5 6 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> button</span> <span class="token attr-name">type</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> button <span class="token punctuation">"</span></span> <span class="token attr-name">:class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> ['btn', 'btn-outline-info', 'btn-sm', {active: isActive}] <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> button <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> button</span> <span class="token punctuation">></span></span> |
There is also a way of writing
1 2 3 4 5 6 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> button</span> <span class="token attr-name">type</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> button <span class="token punctuation">"</span></span> <span class="token attr-name">:class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> ['btn btn-outline-info btn-sm', {active: isActive}] <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> button <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> button</span> <span class="token punctuation">></span></span> |
Use conditional math
1 2 3 4 5 6 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> button</span> <span class="token attr-name">type</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> button <span class="token punctuation">"</span></span> <span class="token attr-name">:class</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> ['btn btn-outline-info btn-sm', isActive ? 'active' : 'disabled'] <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> button <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> button</span> <span class="token punctuation">></span></span> |
: style
Assign dynamically style html element
1 2 3 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token attr-name">:</span> <span class="token style-attr language-css"><span class="token attr-name"><span class="token attr-name">style</span></span> <span class="token punctuation">="</span> <span class="token attr-value"><span class="token punctuation">{</span> <span class="token property">backgroundColor</span> <span class="token punctuation">:</span> color <span class="token punctuation">}</span></span> <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> |
Css attribute names are written in cameCase
computed
The computed object property of the Vuejs instance is almost identical to the method, but different from the method it will be used when it is necessary to determine when the property in the data is saved. Another difference is that when calls to computed calls are not needed ()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token comment">//app.js</span> <span class="token function-variable function">data</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> counterComputed <span class="token operator">:</span> <span class="token number">0</span> <span class="token punctuation">,</span> counterMethod <span class="token operator">:</span> <span class="token number">0</span> <span class="token punctuation">}</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> computed <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function-variable function">printTextComputed</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> “counter printed <span class="token keyword">from</span> computed <span class="token operator">:</span> ” <span class="token punctuation">,</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> counterComputed <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function-variable function">printTextMethod</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> “counter printed <span class="token keyword">from</span> method <span class="token operator">:</span> ” <span class="token punctuation">,</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> counterMethod <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> |
1 2 3 4 5 6 7 8 9 10 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> button</span> <span class="token attr-name">@click</span> <span class="token attr-value"><span class="token punctuation">=</span> ”counterComputed++”</span> <span class="token punctuation">></span></span> computed button <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> button</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token punctuation">></span></span> { { counterComputed }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> br</span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> button</span> <span class="token attr-name">@click</span> <span class="token attr-value"><span class="token punctuation">=</span> ”counterMethod++”</span> <span class="token punctuation">></span></span> method button <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> button</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token punctuation">></span></span> { { counterMethod }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> br</span> <span class="token punctuation">/></span></span> { { printTextMethod() }} { { printTextComputed }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> |
Result
- When the computed button is pressed, the printTextComputed and printTextMethod functions both execute
- When the button method is pressed, only the printTextMethod function is executed
Reason
- methods Do not know when the value used in the function changes, so it runs continuously to check (Any time there is an event)
- computed properties Determines the value used in the variable function, so it is not necessary to run continuously (Only events related to handling the property value of the data it is referencing)
See the difference between COMPUTED and METHODS in Vue.js at The difference between COMPUTED and METHODS
watch
An object type property of the Vuejs instance, used for defining the behavior when the value of a particular property changes. Not only data properties, computed properties can also be watched
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token comment">//app.js</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> watch <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token comment">// counter を watch する</span> <span class="token function-variable function">counter</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token parameter">value</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> vm <span class="token operator">=</span> <span class="token keyword">this</span> <span class="token punctuation">;</span> <span class="token function">setTimeout</span> <span class="token punctuation">(</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> vm <span class="token punctuation">.</span> counter <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token number">2000</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
v-if, v-else
Determines whether the html tag is rendered in the DOM
1 2 3 4 | //html <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token attr-name">v-if</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> boolean <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> Hello! <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token attr-name">v-else</span> <span class="token punctuation">></span></span> Hello again! <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> |
v-show
Determines whether the html tag is displayed or not ( display: none;
)
v-for
Render array elements
1 2 3 4 5 6 | //html <span class="token comment"><!-- ingredients: ["meat", "fruit", "cookies"] --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> ul</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> li</span> <span class="token attr-name">v-for</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> ingredient in ingredients <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> { { ingredient }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> li</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> ul</span> <span class="token punctuation">></span></span> |
When needing index
1 2 3 | <span class="token comment">//html</span> <span class="token operator"><</span> li v <span class="token operator">-</span> <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"(ingredient, i) in ingredients"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> ingredient <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator"><</span> <span class="token operator">/</span> li <span class="token operator">></span> |
Can be used for object type. The second argument is the key, the third is the index
1 2 3 4 5 6 7 | <span class="token comment">//html</span> <span class="token operator"><</span> li v <span class="token operator">-</span> <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"person in persons"</span> <span class="token operator">></span> <span class="token operator"><</span> div v <span class="token operator">-</span> <span class="token keyword">for</span> <span class="token operator">=</span> <span class="token string">"(value, key, index) in person"</span> <span class="token operator">></span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> key <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> value <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> index <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token operator">/</span> div <span class="token operator">></span> <span class="token operator"><</span> <span class="token operator">/</span> li <span class="token operator">></span> |
TODO: explanation
1 2 | <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> li</span> <span class="token attr-name">v-for</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> ingredient in ingredients <span class="token punctuation">"</span></span> <span class="token attr-name">:key</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> ingredient <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> li</span> <span class="token punctuation">></span></span> |
Lifecycle
The life cycle of a vue instance includes the following hooks. Depending on the purpose can write more processing at the desired time.
- beforeCreate
- Created
- beforeMount
- mounted
- (Render DOM)
- (DOM Changed)
- beforeUpdate
- updated
- (this. $ destroy ();)
- beforeDestroy
- Destroyed
1 2 3 4 5 6 7 8 9 10 11 | <span class="token comment">//app.js</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span> <span class="token punctuation">(</span> <span class="token punctuation">{</span> data <span class="token operator">:</span> <span class="token punctuation">{</span> a <span class="token operator">:</span> <span class="token number">1</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> <span class="token function-variable function">created</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// `this` points to the vm instance</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'a is: '</span> <span class="token operator">+</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> a <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> |
Vue component
props
Use when receiving data from another component
Parent Component -> Child Component
Passed quite simply from parent to child using v-bin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //Component cha <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> app-user-deital</span> <span class="token attr-name">:name</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> name <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> app-user-detail</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">import</span> UserDetail <span class="token keyword">from</span> <span class="token string">"./UserDetail.vue"</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function-variable function">data</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">"Kei"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> |
The parent component accepts props
1 2 3 4 5 6 7 8 9 10 11 12 13 | //Component con <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token punctuation">></span></span> { { name }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> props <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token string">"name"</span> <span class="token punctuation">]</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> |
The data received by props in a child component can be manipulated as a data object
Child Component -> Parent Component
There are two main ways to transfer data from child to father: ### 1. $ emit Passes the change of the child’s props to the parent via $ emit function $ emit : The first argument is the event name
, the second argument is the event data
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | //Con <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token punctuation">></span></span> { { name }} <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> p</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> props <span class="token operator">:</span> <span class="token punctuation">[</span> <span class="token string">"name’"</span> <span class="token punctuation">,</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function">resetName</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> myName <span class="token operator">=</span> <span class="token string">"Kei"</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> <span class="token function">$emit</span> <span class="token punctuation">(</span> <span class="token string">"nameWasReset"</span> <span class="token punctuation">,</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> myName <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> |
At the father listen to the event emitted by @
, and handle accordingly.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //Cha <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> app-user-deital</span> <span class="token attr-name">:name</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> name <span class="token punctuation">"</span></span> <span class="token attr-name">@nameWasReset</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> name = $event <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> app-user-detail</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">import</span> UserDetail <span class="token keyword">from</span> <span class="token string">"./UserDetail.vue"</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function-variable function">data</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">"Kei"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> |
2. Callback
Pass the processing function from parent to child via the props property
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //Cha <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> app-user-deital</span> <span class="token attr-name">:name</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> name <span class="token punctuation">"</span></span> <span class="token attr-name">:resetFn</span> <span class="token attr-value"><span class="token punctuation">=</span> <span class="token punctuation">"</span> resetName() <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> app-user-detail</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> div</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span> template</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> script</span> <span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">import</span> UserDetail <span class="token keyword">from</span> <span class="token string">"./UserDetail.vue"</span> <span class="token keyword">export</span> <span class="token keyword">default</span> <span class="token punctuation">{</span> <span class="token function-variable function">data</span> <span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">"Kei"</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">,</span> methods <span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token function">resetName</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> myName <span class="token operator">=</span> <span class="token string">"Kei"</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span> script</span> <span class="token punctuation">></span></span> |
TODO continue