Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Onsen UIで知っておくと便利なコト
Search
Atsushi Nakatsugawa
PRO
May 26, 2018
Technology
960
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Onsen UIで知っておくと便利なコト
Monaca UG OHMIYA #2の発表資料です
Atsushi Nakatsugawa
PRO
May 26, 2018
More Decks by Atsushi Nakatsugawa
See All by Atsushi Nakatsugawa
開発を高速化。AIコーディングエージェントとCodeRabbitでループエンジニアリング
moongift
PRO
0
31
AIコーディングの次。コードレビューと理解負荷を解消して組織の開発生産性を高める
moongift
PRO
2
3k
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
680
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
6
3.9k
コーディングだけ速くとも意味がない。自動レビューによる開発の高速化
moongift
PRO
0
140
AI 支援研究開発におけるコードレビューの役割と限界
moongift
PRO
0
190
個人AIからチームAIへ:開発における品質と生産性の再設計
moongift
PRO
0
530
AI活用の格差をなくす:チーム全体のAI開発生産性を底上げする方法
moongift
PRO
1
790
CodeRabbit 2026年04月アップデート
moongift
PRO
0
110
Other Decks in Technology
See All in Technology
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
26
17k
LLMに渡さなかった仕事
nanaism
0
1.4k
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
270
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1.2k
おい、エージェントを使って終わらせろ
nwiizo
3
870
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
100
Oracle Cloud Network Path Analyzerを試してみた/I Tried Out Oracle Cloud Network Path Analyzer
masakiokuda
1
110
AI de Idea
kawaguti
PRO
2
130
AIエージェントの権限管理 3: Agentic RAG の Fine grained access control 編
ren8k
0
220
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
7
3.6k
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.4k
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
3
590
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
Six Lessons from altMBA
skipperchong
29
4.5k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
380
WENDY [Excerpt]
tessaabrams
14
39k
Mind Mapping
helmedeiros
1
370
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
What's in a price? How to price your products and services
michaelherold
247
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
900
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
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をマスターしましょう! • イベントハンドリングの方法を覚えれば分かりやすく、すっ きり書けます!