Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Onsen UIで知っておくと便利なコト
Search
Atsushi Nakatsugawa
PRO
May 26, 2018
Technology
0
920
Onsen UIで知っておくと便利なコト
Monaca UG OHMIYA #2の発表資料です
Atsushi Nakatsugawa
PRO
May 26, 2018
Tweet
Share
More Decks by Atsushi Nakatsugawa
See All by Atsushi Nakatsugawa
AIで急増した生産量の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
34
AIによるコードレビューで 開発体験を向上させよう!
moongift
PRO
0
39
レビュー負債を解消する ― CodeRabbitが支えるAI駆動開発
moongift
PRO
0
560
個人開発からエンプラまで。AIコードレビューで開発を楽しもう
moongift
PRO
0
400
AIで急増した生産「量」の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
1.5k
Codexとも仲良く。CodeRabbit CLIの紹介
moongift
PRO
1
840
リレーションからマーケティングへ。継続するDevRelのために行うべきこと
moongift
PRO
0
25
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
80
個人開発にAIレビューを導入しよう
moongift
PRO
0
67
Other Decks in Technology
See All in Technology
モノタロウ x クリエーションラインで実現する チームトポロジーにおける プラットフォームチーム・ ストリームアラインドチームの 効果的なコラボレーション
creationline
0
860
業務の煩悩を祓うAI活用術108選 / AI 108 Usages
smartbank
9
22k
I tried making a solo advent calendar!
zzzzico
0
150
Introduction to Bill One Development Engineer
sansan33
PRO
0
350
あの夜、私たちは「人間」に戻った。 ── 災害ユートピア、贈与、そしてアジャイルの再構築 / 20260108 Hiromitsu Akiba
shift_evolve
PRO
0
660
純粋なイミュータブルモデルを設計してからイベントソーシングと組み合わせるDeciderの実践方法の紹介 /Introducing Decider Pattern with Event Sourcing
tomohisa
1
1.1k
AIと融ける人間の冒険
pujisi
0
120
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
技術選定、下から見るか?横から見るか?
masakiokuda
0
190
AI に「学ばせ、調べさせ、作らせる」。Auth0 開発を加速させる7つの実践的アプローチ
scova0731
0
280
Security Hub と出会ってから 1年半が過ぎました
rch850
0
110
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
510
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Ruling the World: When Life Gets Gamed
codingconduct
0
120
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
330
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
360
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
40
Art, The Web, and Tiny UX
lynnandtonic
304
21k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
140
Transcript
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UIで知っておくと便利なコト
PAGE DAY 2017/11/01 # MOONGIFT X / 12 自己紹介 @goofmint
fb.me/goofmint 中津川 篤司 株式会社MOONGIFT 代表取締役 NCMB エヴァンジェリスト 2004年1月よりオープンソース・ソフトウェアを毎 日紹介するブログ MOONGIFT を運営。 http://www.moongift.jp/ Monaca Pressの執筆/Monaca UGサポート
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UI?
• Monacaを提供しているアシアル社がメインで開発しているモ バイル向けHTML5 UIフレームワーク • ネイティブアプリっぽいUI、インタラクションを簡単に実現 • Monacaとの相性よし
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UI
vs Ionic framework 0OTFO6* *POJDGSBNFXPSL ϑϨʔϜϫʔΫ +BWB4DSJQU"OHVMBS3FBDU7VF K2VFSZ "OHVMBS ωΠςΟϒײ ˓ ˕ υΩϡϝϯτ ຊޠӳޠ ӳޠ 2" 5FSBUBJM 4UBDLPWFSqPX 【Angular2】 そろそろ Onsen UI 2 と Ionic2 を開発面からみて比較しようと思う。
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UIの注意点
• モバイル、タブレット向けです。デスクトップブラウザはサ ポート外なので注意しましょう(デスクトップも対象なら Vuetifyがいいらしい) • textareaがない • 色々やってくれる反面、無理をしようと思うと大変に… (Onsen流に慣れる必要あり)
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ドキュメント
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ドキュメント
PAGE DAY 2017/11/01 # MOONGIFT X / 12 <ons-navigator swipeable
id="myNavigator" page=“page1.html"> </ons-navigator> <template id="page1.html"> <ons-page id="page1"> <ons-toolbar> <div class="center">Page 1</div> </ons-toolbar> <p>This is the first page.</p> <ons-button id="push-button">Push page</ons-button> </ons-page> </template> <template id="page2.html"> <ons-page id="page2"> <ons-toolbar> <div class="left"><ons-back-button>Page 1 </ons-back-button></div> <div class="center"></div> </ons-toolbar> <p>This is the second page.</p> </ons-page> </template>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 document.addEventListener('init', function(event)
{ var page = event.target; if (page.id === 'page1') { page.querySelector('#push-button').onclick = function() { document.querySelector(‘#myNavigator').pushPage('page2.html', {data: {title: 'Page 2'}}); }; } else if (page.id === 'page2') { page.querySelector('ons-toolbar .center’) .innerHTML = page.data.title; } });
PAGE DAY 2017/11/01 # MOONGIFT X / 12 よく分からない…
PAGE DAY 2017/11/01 # MOONGIFT X / 12 最近掴んできたコツ
PAGE DAY 2017/11/01 # MOONGIFT X / 12 素で使う場合
PAGE DAY 2017/11/01 # MOONGIFT X / 12 タブバーを使わない場合 •
とりあえず <ons-navigator /> を使う <ons-navigator swipeable id="nav" page=“main.html”> </ons-navigator> 最初に表示するページ タブバー
PAGE DAY 2017/11/01 # MOONGIFT X / 12 main.html •
<ons-page />で囲む。bodyタグの中だけを書く <ons-page> <p>Hello World!</p> <ons-button id="move" modifier=“large--quiet"> 別ページに移動 </ons-button> </ons-page>
PAGE DAY 2017/11/01 # MOONGIFT X / 12
PAGE DAY 2017/11/01 # MOONGIFT X / 12 main.htmlが表示された時に処理実行 •
main.htmlの下に<script>タグで記述 <ons-page> <p>Hello World!</p> <ons-button id="move" modifier=“large--quiet"> 別ページに移動 </ons-button> </ons-page> <script> alert(true); </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Onsen UIのイベント処理
• ons.ready(() => {}) アプリが立ち上がった時に一回だけ実行 DOMContentLoaded + DeviceReady が合わさったようなもの • document.addEventListener(‘init’, (e) => {}) 画面が構成された時に実行 同じ画面を使い回す場合は1回だけ。別な画面の情報も。 e.target.id で <ons-page id=“xxx” /> に割り当てたidで判別 • document.addEventListener(‘show’, (e) => {}) 画面が表示される時に実行 e.target.id で <ons-page id=“xxx” /> に割り当てたidで判別
PAGE DAY 2017/11/01 # MOONGIFT X / 12 main.htmlで次のように記述 •
ons.getScriptPage().onInit = function() {} 画面が構成された時に呼ばれる その画面の時にしか呼ばれない • ons.getScriptPage().onShow = function() {} 画面が表示された時に呼ばれる その画面の時にしか呼ばれない
PAGE DAY 2017/11/01 # MOONGIFT X / 12 違い EPDVNFOUBEE&WFOU-JTUFOFS
POTHFU4DSJQU1BHF ϖʔδఆ FUBSHFU UIJT ଞͷϖʔδಡΈࠐΈ࣌ ݺΕΔ ݺΕͳ͍ ɾׅހ &4 ˓ º POTQBHFJE ඞཁ ෆཁ QPQ࣌ Πϕϯτ͕Δ Πϕϯτফ͑Δ
PAGE DAY 2017/11/01 # MOONGIFT X / 12 コード ons.getScriptPage().onInit
= function() { // 処理を書く } document.addEventListener('init', (e) => { const page = e.target; if (page.id !== 'AAA') return; // 処理を書く });
PAGE DAY 2017/11/01 # MOONGIFT X / 12 つまりこう <ons-page>
<p>Hello World!</p> <ons-button id="move" modifier=“large--quiet"> 別ページに移動 </ons-button> <script> ons.getScriptPage().onShow = function() { console.log('Show') } ons.getScriptPage().onInit = function() { console.log('Init') } </script> </ons-page>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 イベント処理 •HTML中でのonclick
•document.querySelector
PAGE DAY 2017/11/01 # MOONGIFT X / 12 <ons-page> <p>Hello
World!</p> <ons-button id="move" onclick="move()" modifier=“large--quiet"> 別ページに移動 </ons-button> <script> ons.getScriptPage().onShow = function() { console.log('Show') } ons.getScriptPage().onInit = function() { document.querySelector('#move').onclick = (e) => { document.querySelector('#nav').pushPage('detail.html'); } } const move = () => { document.querySelector('#nav').pushPage('detail.html'); } </script> </ons-page>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 navigatorで戻る処理 •
ons-back-button がよしなにやってくれる • document.querySelector(‘#nav').popPage(); <ons-toolbar> <div class="left"> <ons-back-button> Back </ons-back-button> </div> <div class="center"></div> </ons-toolbar>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 HTML操作 •
Onsen UIが適当に変換してくれる const result = document.querySelector('#result') result.innerHTML = `${result.innerHTML} <ons-list-item>${new Date}</ons-list-item>`;
PAGE DAY 2017/11/01 # MOONGIFT X / 12 画面遷移する時にデータを渡す DPOTUNFTTBHFEPDVNFOU
HFU&MFNFOU#Z*E NFTTBHF WBMVF EPDVNFOURVFSZ4FMFDUPS OBW QVTI1BHF EFUBJMIUNM \ EBUB\NFTTBHF^ ^
PAGE DAY 2017/11/01 # MOONGIFT X / 12 データを受け取る ons.getScriptPage().onInit
= function() { document.getElementById('receive') .innerHTML = this.data.message; }
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Vue.jsで使う場合
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Monaca CLIを使いましょう
$ npm i monaca-cli -g
PAGE DAY 2017/11/01 # MOONGIFT X / 12 ベースを作る $
monaca create YOUR_PROJECT_NAME
PAGE DAY 2017/11/01 # MOONGIFT X / 12 大事なのはsrc以下 $
tree src/ src/ ├── App.vue ├── CustomToolbar.vue ├── Page1.vue ├── Page2.vue ├── main.js └── public └── index.html.ejs 1 directory, 6 files
PAGE DAY 2017/11/01 # MOONGIFT X / 12 App.vue <template>
<v-ons-navigator :page-stack="pageStack"> <component :is="page" v-for="page in pageStack" :page-stack="pageStack"></component> </v-ons-navigator> </template> <script> import page1 from './Page1'; import page2 from './Page2'; export default { data() { return { pageStack: [page1] } } } </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 App.vue <template>
<v-ons-navigator :page-stack="pageStack"> <component :is="page" v-for="page in pageStack" :page-stack="pageStack"></component> </v-ons-navigator> </template> <script> import page1 from './Page1'; import page2 from './Page2'; export default { data() { return { pageStack: [page1] } } } </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 App.vue <template>
<v-ons-navigator :page-stack="pageStack"> <component :is="page" v-for="page in pageStack" :page-stack="pageStack"></component> </v-ons-navigator> </template> <script> import page1 from './Page1'; import page2 from './Page2'; export default { data() { return { pageStack: [page1] } } } </script>
PAGE DAY 2017/11/01 # MOONGIFT X / 12 Page1.vue <template>
<v-ons-page> <custom-toolbar>Page 1</custom-toolbar> <p style="text-align: center"> This is the first page <v-ons-button @click="push">Push Page 2</v-ons-button> </p> </v-ons-page> </template> <script> import customToolbar from './CustomToolbar';
PAGE DAY 2017/11/01 # MOONGIFT X / 12 まとめ •
Onsen UIを使えばネイティブライクなUIのハイブリッドアプ リが簡単に作れます • Web Componentをマスターしましょう! • イベントハンドリングの方法を覚えれば分かりやすく、すっ きり書けます!