SlideShare une entreprise Scribd logo
1  sur  77
Télécharger pour lire hors ligne
One Night Vue.js 
万葉究楽部
profile 
株式会社万葉 / @Kyuden_
Vue.js 事例紹介 
こんな感じの通知機能が20分位※で作れました。それくらい扱いやすいです。 
※デザインの時間は除く
Vue.jsさわってみましょう
環境構築 
CloneしてREADME.mdを読んでね 
https://github.com/Kyuden/one-night-vue
Stage 1 
双方向バインディングを体験
2 staps 
1. ブラウザで表示 
• www/demo1.html 
2. コードから処理を推測 
• coffee/demo1.coffee 
• haml/demo1.haml
thinking time
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
Vue VueクラスのコンストラクタでViewModelを作成 
VueModelではなくViewModel
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
  
以下の初期値をVueクラスのコンストラクタに渡し 
ViewModelを作成している  
el: "#demo1" 
data: 
message: "Hello Vue" 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
next
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
el 
ViewModelに紐付けるDOM要素を指定 
1つのViewModelには一つのDOMしか紐付けることが出来ないのでIDで指定
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
s  #demo1のDOMを指定している 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"} 
#demo1のDOMがViewModelを紐づく
coffee/demo1.coffee 
! 
new Vue 
el: "#demo2" 
s 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
 #demo1を#demo2に変更すると 
 ViewModelの管理外となるので動作しない 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
next
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
data 
ViewModelが保持するデータを定義 
ViewModelのプロパティにアクセスするプロキシと言っても良い
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
 data配下にmessageプロパティとして  
 初期値 ‘’Hello Vue’’ を定義している 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
next
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
v-text 
DOM要素の内側をViewModelのプロパティ値でバインディングする 
v-◯◯◯をDirectiveと呼ぶ。EX) v-textディレクティブ
coffe/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"} 
 messageプロパティ値"Hello Vue”が 
 %pタグ内にバインディングされる
next
coffee/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"}
v-model 
%inputや%selectや%textareaなど編集可能な要素を使用し 
ViewとViewModle間で双方向データバインディングを行う 
データは常に同期される(同期のタイミングを指定するオプションも存在する)
coffe/demo1.coffee 
! 
new Vue 
el: "#demo1" 
data: 
message: "Hello Vue" 
haml/demo1.haml 
! 
%body 
#demo1 
%p{"v-text" => "message"} 
%input{"v-model" => "message"} 
 %input要素への入力値に応じて 
 messageプロパティ値が更新される 
 %input要素への入力値に応じて 
 messageプロパティ値を同期させる
Stage 1 End
Stage 2 
{{ }}
2 staps 
1. ブラウザで表示 
• www/demo2.html 
2. コードから処理を推測 
• coffee/demo2.coffee 
• haml/demo2.haml 
以後省略(全Stage同じです)
thinking time
coffee/demo2.coffee 
! 
new Vue 
el: "#demo2" 
data: 
user: 
firstName: "Masahiro" 
lastName: "kyuden" 
haml/demo2.haml 
! 
#demo2 
%p {{ 'hello' + ' ' + user.firstName + ' ' + user.lastName }}
{{ }} 
Mustacheはv-textとしてコンパイルされる 
Mustacheテキスト以外にHTML属性指定でも使用することができる
coffee/demo2.coffee 
! 
new Vue 
el: "#demo2" 
data: 
user: 
firstName: "Masahiro" 
lastName: "kyuden" 
haml/demo2.haml 
! 
#demo2 
%p {{ 'hello' + ' ' + user.firstName + ' ' + user.lastName }} 
%p{"v-text" => "'hello ' + user.firstName + ' ' + user.lastName"}
Stage 2 End
Stage 3 
色々なDirectiveを使ってみよう
thinking time
coffee/demo3.coffee 
! 
new Vue 
el: '#demo3' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo3.haml 
! 
#demo3 
%ul 
/step① 
%li{"v-repeat" => "todos"} 
{{content}}
v-repeat 
配列を指定する事で子のViewModelを作成する 
(配列の要素の数だけ繰り返し実行される) 
引数がない場合はViewModelのDataを配列として扱う
coffee/demo3.coffee 
! 
new Vue 
el: '#demo3' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo3.haml 
! 
#demo3 
%ul 
/step① 
%li{"v-repeat" => "todos"} 
{{content}} 
配列であるtodosを与えると要素数分作成さ 
れる。
next
coffee/demo3.coffee 
! 
new Vue 
el: '#demo3' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo3.haml 
! 
#demo3 
%ul 
sass/style.sass 
! 
li.done 
text-decoration: line-through 
/step② 
%li{class: "{{done ? 'done' : ''}}", "v-repeat" => "todos"} 
{{content}}
{{ }} 
MustacheのBindingはHTML属性指定でも有効 
ただし%imgのsrc指定はv-attrを使用するべき。 
ブラウザ評価時にMustache形式のままHTTPリクエストを発行し404が起きるため
next
coffee/demo3.coffee 
! 
new Vue 
el: '#demo3' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo3.haml 
! 
#demo3 
%ul 
  /step③ 
%li{class: "{{done ? 'done' : ''}}", "v-repeat" => "todos", "v-on" => "click: done = !done"} 
{{content}}
v-on 
イベントリスナーを要素に登録する。関数か式を引数で評価する。 
キータイプイベントなども用意されている
coffee/demo3.coffee 
! 
new Vue 
el: '#demo3' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo3.haml 
! 
#demo3 
%ul 
  /step③ 
%li{class: "{{done ? 'done' : ''}}", "v-repeat" => "todos", "v-on" => "click: done = !done"} 
{{content}} 
 clickされた時に  do ne =  !d one  を評価する
Stage 3 End
Stage 4 
filterを使ってみよう
thinking time
coffee/demo4.coffee 
! 
new Vue 
el: '#demo4' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo4.haml 
! 
#demo4 
%ul 
%li{class: "{{done ? 'done' : ''}}", "v-repeat" => "todos", "v-on" => "click: done = !done"} 
/step① 
{{content | uppercase}}
| 
任意のフィルターで値を処理することができる 
ディレクティブごとにフィルターの使用用途は異なる
coffee/demo4.coffee 
! 
new Vue 
el: '#demo4' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo4.haml 
! 
#demo4 
%ul 
%li{class: "{{done ? 'done' : ''}}", "v-repeat" => "todos", "v-on" => "click: done = !done"} 
/step① 
{{content | uppercase}} 
Contentに対しuppercaseフィルターを通し 
バインディングを行う
coffee/demo4.coffee 
! 
new Vue 
el: '#demo4' 
data: 
todos: [ 
{ 
done: true 
content: 'Learn JS' 
} 
{ 
done: false 
content: 'Learn vue.js' 
} 
{ 
done: true 
content: 'Lean yourself' 
} 
] 
haml/demo4.haml 
! 
#demo4 
%ul 
%li{class: "{{done ? 'done' : ''}}", "v-repeat" => "todos", "v-on" => "click: done = !done"} 
/step② 
{{content | uppercase | lowercase}} 
 復数のフィルターを掛ける事ができる
Stage 4 End
Stage 5 
methodを使ってみよう
thinking time
coffee/demo5.coffee 
! 
new Vue 
el: '#demo5' 
data: 
nameList: [] 
displayName: "" 
newName: "" 
methods: 
addName: -> 
@displayName = @newName 
@newName = "" 
haml/demo5.haml 
! 
#demo5 
%p {{displayName}} 
%input{ "v-model" => "newName", "v-on" => "keyup:addName | key enter"}
methods 
methods配下にメソッドを定義する 
定義されたメソッドはdirectiveから直接呼ぶことができる
coffee/demo5.coffee 
! 
new Vue 
el: '#demo5' 
data: 
nameList: [] 
displayName: "" 
newName: "" 
methods: 
addName: -> 
@displayName = @newName 
@newName = "" 
 methodのコンテキストはViewModel 
 のインスタンスになる 
haml/demo5.haml 
! 
#demo5 
%p {{displayName}} 
%input{ "v-model" => "newName", "v-on" => "keyup:addName | key enter"} 
 v-onではkeyイベントをフィルターで 
 制御することができる
Stage 5 End
!
TODOアプリを作ってみよう
TODOアプリ仕様
実装ファイル 
• coffee/demo6-1.coffee 
• haml/demo6-1.haml
Answer 
• coffee/demo6-2.coffee 
• haml/demo6-2.haml
demo7も用意してあるので 
Vueに興味が湧いた方は読んでみてください
少しだけVue.jsの雰囲気をつかめたでしょうか?
特徴
Simple 
• APIがsimpleで機能も少なく学習コストが低い 
• ViewModelをインスタンス化するだけで使い始める事ができる 
公式guideを読むのがおすすめ。一日あれば十分に読める
Fast 
! 
• TodoMVC projectのベンチマークテスト(非公式)で最も早い 
• IE8以下に対応していないため、JSの新機能の恩恵を得られる設計と 
なっているのが大きいかもしれない
Flexible 
• 他のライブラリと合わせて使用する事ができる 
• 他のライブラリに依存していない 
Lo-Dash.jsなど慣れしたんだライブラリと組み合わせて使うことができる
next step
Read guide 
http://vuejs.org/guide/
Give me github star 
https://github.com/Kyuden/one-night-vue
参考文献 
• http://vuejs.org/guide/ 
• http://todomvc.com/examples/vue/

Contenu connexe

Tendances

AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話
Yosuke Onoue
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
Kazuhiro Kotsutsumi
 

Tendances (20)

Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + Vuex
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 
Flask勉強会その1
Flask勉強会その1Flask勉強会その1
Flask勉強会その1
 
AngularJSでの非同期処理の話
AngularJSでの非同期処理の話AngularJSでの非同期処理の話
AngularJSでの非同期処理の話
 
はじめてのVue.js
はじめてのVue.jsはじめてのVue.js
はじめてのVue.js
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
Async Enhancement
Async EnhancementAsync Enhancement
Async Enhancement
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
 
let UIWebView as WKWebView
let UIWebView as WKWebViewlet UIWebView as WKWebView
let UIWebView as WKWebView
 
The master plan of scaling a web application
The master plan ofscaling a web applicationThe master plan ofscaling a web application
The master plan of scaling a web application
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
React入門-JSONを取得して表示する
React入門-JSONを取得して表示するReact入門-JSONを取得して表示する
React入門-JSONを取得して表示する
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
 
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
Nuxt なしで Vue App 作る時に乗り越えるべき5つの壁
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsugSpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
 
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
サーバサイドで動的にhtml生成していたりjQueryをガッツし使っている既存プロジェクトにAngularJSを部分的につっこんでみた @jscafe21
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 

Similaire à One night Vue.js

AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
Yoshifumi Kawai
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
Sea Mountain
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
i7a
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
 
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
Masami Yabushita
 

Similaire à One night Vue.js (20)

20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょ
 
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップEWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
 
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
AWS + Windows(C#)で構築する.NET最先端技術によるハイパフォーマンスウェブアプリケーション開発実践
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作るEWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
 
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作るEWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
EWD 3トレーニングコース#31 ewd-xpressでWebおよびRESTサービスを作る
 
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップEWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
EWD 3トレーニングコース#5 ewd-xpressアプリ開発第1ステップ
 
Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10Ruby on Rails Tutorial Chapter8-10
Ruby on Rails Tutorial Chapter8-10
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
WordPressで制御するこれからのIoT
WordPressで制御するこれからのIoTWordPressで制御するこれからのIoT
WordPressで制御するこれからのIoT
 
20200304 vuejs
20200304 vuejs20200304 vuejs
20200304 vuejs
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>
Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>
Ma_gician (世界中のフロントエンダーの残業時間を減らす、新しいフロントエンドフレームワーク)<詳細版>
 
Ruby on Rails Tutorial
Ruby on Rails TutorialRuby on Rails Tutorial
Ruby on Rails Tutorial
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
バッテリー監視のためにバックグラウンドタスクについて調べたらなくなってたから泣く泣くタイマーApiを使ってみた話
 

One night Vue.js