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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
63
AIによるコードレビューで 開発体験を向上させよう!
moongift
PRO
0
48
レビュー負債を解消する ― CodeRabbitが支えるAI駆動開発
moongift
PRO
0
590
個人開発からエンプラまで。AIコードレビューで開発を楽しもう
moongift
PRO
0
420
AIで急増した生産「量」の荒波をCodeRabbitで乗りこなそう
moongift
PRO
1
1.6k
Codexとも仲良く。CodeRabbit CLIの紹介
moongift
PRO
1
880
リレーションからマーケティングへ。継続するDevRelのために行うべきこと
moongift
PRO
0
32
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
85
個人開発にAIレビューを導入しよう
moongift
PRO
0
74
Other Decks in Technology
See All in Technology
Tebiki Engineering Team Deck
tebiki
0
24k
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.6k
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
350
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
190
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
マネージャー視点で考えるプロダクトエンジニアの評価 / Evaluating Product Engineers from a Manager's Perspective
hiro_torii
0
180
AIエージェントに必要なのはデータではなく文脈だった/ai-agent-context-graph-mybest
jonnojun
1
250
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
480
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
760
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.4k
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
270
Featured
See All Featured
Optimizing for Happiness
mojombo
379
71k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
79
[SF Ruby Conf 2025] Rails X
palkan
1
760
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
110
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
150
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
750
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
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をマスターしましょう! • イベントハンドリングの方法を覚えれば分かりやすく、すっ きり書けます!