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
880
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コードレビューの活かし方
moongift
PRO
0
34
個人開発にAIレビューを導入しよう
moongift
PRO
0
31
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
560
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
1.1k
開発スピードとスキル向上を両立するAIコードレビューの活かし方
moongift
PRO
0
52
Let's speed up personal development with AI code reviews
moongift
PRO
0
19
DevRelに活かせるAIツールの紹介とレビュー
moongift
PRO
0
110
DevRelの基礎と戦略
moongift
PRO
0
56
DevRelの始め方
moongift
PRO
3
730
Other Decks in Technology
See All in Technology
dbt Cloudの新機能を紹介!データエンジニアリングの民主化:GUIで操作、SQLで管理する新時代のdbt Cloud
sagara
0
180
AIにどこまで任せる?実務で使える(かもしれない)AIエージェント設計の考え方
har1101
2
570
MCPを利用して自然言語で3Dプリントしてみよう!
hamadakoji
0
1.5k
Autonomous Database サービス・アップデート (FY25)
oracle4engineer
PRO
1
750
脅威をモデリングしてMCPのセキュリティ対策を考えよう
flatt_security
4
1.3k
Workflows から Agents へ ~ 生成 AI アプリの成長過程とアプローチ~
belongadmin
2
110
Ретроспективный взгляд на Vue 3. Даша Сабурова, Vue-разработчик Lamoda Tech
lamodatech
0
1.1k
Kubernetesで作るAIプラットフォーム
oracle4engineer
PRO
2
240
Drawing with LLMs
rist
0
250
Text-to-SQLの評価データセットを作って最新LLMモデルの性能評価をしてみた
gotalab555
3
760
AIコーディング新時代を生き残るための試行錯誤 / AI Coding Survival Guide
tomohisa
9
11k
Data Hubグループ 紹介資料
sansan33
PRO
0
1.8k
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
770
Building Applications with DynamoDB
mza
95
6.4k
Done Done
chrislema
184
16k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Speed Design
sergeychernyshev
30
990
Thoughts on Productivity
jonyablonski
69
4.7k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
For a Future-Friendly Web
brad_frost
179
9.8k
Navigating Team Friction
lara
186
15k
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をマスターしましょう! • イベントハンドリングの方法を覚えれば分かりやすく、すっ きり書けます!