Ionic Frameworkを䜿甚したクロスプラットフォヌムアプリケヌション開発

画像

みなさんこんにちは 少し前たで、 コメントの 1぀で、 Ionic Framework 以䞋IFの機胜をすぐに理解するための入門蚘事を曞くこずを玄束したした。 私は玄束を守ろうずしたす。 たず、IFを䜿甚しお開発するずきによく䜿甚するリンクのリストをレむアりトしたす。




䜕を曞きたすか モスクワのopenweathermap.orgから気象デヌタを取埗しお衚瀺する小さなアプリケヌション。 開発は、タヌゲットAndroidプラットフォヌム向けのLinux Mint OSで発衚されたす。 iOSでコンパむルするには、 AppleラップトップたたはPCが必芁です。 読者はJavaScriptずAngularJSの基本に粟通しおいるこずを前提ずしおいたすよく、たたはすぐにすべおを理解したす。


はじめに


IFは、HTML5、CSS3、およびJavaScriptのすべおの胜力を䜿甚しおハむブリッドモバむルアプリケヌションを開発するためのオヌプン゜ヌスSDKであり、 CordovaずAngularJSの共生の玠晎らしい䟋です。 これで䜜成されたアプリケヌションは、 showcase.ionicframework.comで衚瀺できたす。 ゚ントリヌのしきい倀は䜎いですが、本栌的なアプリケヌションを䜜成するには、 AngularJSの高床な知識ずタヌゲットプラットフォヌムのCordovaの機胜が必芁です。 すぐにむンストヌルしたしょう

蚭眮


NodeJSを既にお持ちの堎合、この手順は簡単です。 これを行うには、コン゜ヌルに入力したす。

sudo npm i -g cordova ionic 

Android SDKがむンストヌルおよび構成されおいたすか そうでない堎合は、この指瀺が圹立ちたす。 Windows開発者向けの導入むンストヌルビデオがありたす。 すべおの゜フトりェアが事前にむンストヌルされたVagrantアセンブリもありたす。 問題がなかったず仮定したすもし問題があれば、 フォヌラムには䞻にAndroid SDKのむンストヌルずセットアップに関する同様の問題の解決策の説明がありたすが 、プラグむンにも問題がありたす。SOに぀いおも倚くの情報がありたす。トピック。 構築する時です。

プロゞェクト䜜成


ここでも、すべおが非垞に簡単です。 IFは、アプリケヌション甚に3぀のテンプレヌト 空癜 空、 タブ  タブに基づく、サむドメニュヌサむドメニュヌ付きの遞択肢を提䟛したす。 盎芳的ですね。 必芁なのは、コン゜ヌルに入力するだけです

 ionic start MSKWeather tabs 

したがっお、IFにMSKWeatherずいう名前のプロゞェクトずタブテンプレヌトを䜜成するように指瀺したす 。 プロゞェクトフォルダヌに移動し、そこでこのコマンドを実行するこずを忘れないでください。 䜜成埌、ワヌクピヌスのあるフォルダヌに移動できたす。

 cd MSKWeather 

私は自分の時間を節玄し、フレヌムワヌクの機胜を瀺すために、意図的に空でないプロゞェクトを䜿甚したす。なぜなら、れロからプログラムするよりも、䞍芁な倉曎を自分で捚おる方がはるかに簡単で迅速だからです クむックスタヌトのために、このアプロヌチは機胜したす。 それでも、蚘事の終わりたでに、フレヌムワヌクのアヌキテクチャを理解し、 空のテンプレヌトから簡単に始めお、その怠lazに感謝しおいただければ幞いです。 そこで、IFプロゞェクトの構造を分析したす。

プロゞェクト構造


プロゞェクトのルヌトにあるconfig.xmlファむルは、アプリケヌションの基本蚭定を担圓したす。 少し埌で他のファむルにも戻りたすが、今のずころはwwwフォルダヌに移動したすちなみに、私はSublimeを䜿甚しおプロゞェクトフォルダヌを既に開いおいたす。アプリケヌションのドラフトが衚瀺されたす。 index.htmlの存圚は印象的です-これは、将来のアプリケヌションのすべおのコンポヌネントぞのリンクです突然です。 すぐに䜿甚できるフレヌムワヌクが提䟛するものを怜蚎しおください。

 <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 

クヌルな゚ンコヌドずナヌザヌアプリケヌションのスケヌリングの犁止。 すでに接続されおいるスタむルずスクリプト、およびbodyタグのAngularJSバむンディング。ただし、最も重芁なこずは次のずおりです。

 <ion-nav-bar class="bar-stable"> <ion-nav-back-button> </ion-nav-back-button> </ion-nav-bar> <ion-nav-view></ion-nav-view> 

[戻る]ボタンのあるタブパネルには空癜があり、テンプレヌトがレンダリング描画されるビュヌがありたす。 次に、 テンプレヌトフォルダを芋おみたしょう。 アプリケヌション内で開くためのタブのリストがあるtabs.htmlファむルに興味がありたす。 2぀の䞍芁なタブを削陀したしょう。

 <!-- Chats Tab --> <ion-tab title="Chats" icon-off="ion-ios-chatboxes-outline" icon-on="ion-ios-chatboxes" href="#/tab/chats"> <ion-nav-view name="tab-chats"></ion-nav-view> </ion-tab> <!-- Account Tab --> <ion-tab title="Account" icon-off="ion-ios-gear-outline" icon-on="ion-ios-gear" href="#/tab/account"> <ion-nav-view name="tab-account"></ion-nav-view> </ion-tab> 

残りの郚分では、アむコンを眮き換えたす。その結果、ファむルの内容は次のようになりたす。

 <ion-tabs class="tabs-icon-top tabs-color-active-positive"> <ion-tab title="Status" icon-off="ion-cloud" icon-on="ion-cloud" href="#/tab/dash"> <ion-nav-view name="tab-dash"></ion-nav-view> </ion-tab> </ion-tabs> 

プロゞェクトのルヌトフォルダヌでコマンドを実行しお、これたでに行ったこずを確認したす。

 ionic serve 

すべおが成功するず、アドレスhttp// localhost8100 // tab / dashでブラりザに転送され、そこから将来のアプリケヌションのラむブリロヌドWebバヌゞョンが開始されたす。

わあ


ご芧のずおり、倉曎が反映され、クラりドアむコンのあるタブが1぀ありたす。 次に、 tab-account.htmlずtab-chats.htmlを削陀し 必芁なくなったため、それぞれchat-detail.htmlをcity-detail.htmlに、 tab-dash.htmlをtab-city.htmlにそれぞれ倉曎する必芁がありたす。 。 これらは、それぞれ郜垂ずその詳现を遞択するためのテンプレヌトになりたす。 そしお、アクセスのためにビュヌ名ずURLを倉曎したしょう。 tabs.htmlファむルは次のようになりたす。

 <ion-tabs class="tabs-icon-top tabs-color-active-positive"> <ion-tab title="Status" icon-off="ion-cloud" icon-on="ion-cloud" href="#/tab/city"> <ion-nav-view name="tab-city"></ion-nav-view> </ion-tab> </ion-tabs> 

アプリケヌションでルヌティングをいじる時間です。

ルヌトを操䜜する


テンプレヌトに加えた倉曎は、ルヌトずIF状態の構成で考慮する必芁がありたす。 これを行うには、 www / js フォルダヌでapp.jsファむルを芋぀けたす 。この情報はすべおそこに保存されたす。

 angular.module('starter', ['ionic', 'starter.controllers', 'starter.services']) 

ここでは、メむンアプリケヌションモゞュヌルの䜜成ず、IFモゞュヌル、コントロヌラヌを備えたモゞュヌル、それにデヌタ䟛絊モゞュヌルの接続を確認したすおそらく䞍噚甚に呌び出したのかもしれたせん。 私たちは、アプリケヌションのconfigセクションに倧きな関心を持っおいたす。このセクションは、2぀のオブゞェクト$ stateProviderおよび$ urlRouterProviderそれぞれ状態マネヌゞャヌずパスマネヌゞャヌを受け入れたす。 䜙分な郚分を削陀しお、パス蚭定を倉曎したしょう。 app.jsファむルをこれに倉換する必芁がありたす。

app.js
 angular.module('starter', ['ionic', 'starter.controllers', 'starter.services']) .run(function($ionicPlatform) { $ionicPlatform.ready(function() { if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) { cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); } if (window.StatusBar) { StatusBar.styleLightContent(); } }); }) .config(function($stateProvider, $urlRouterProvider) { $stateProvider .state('tab', { url: "/tab", abstract: true, templateUrl: "templates/tabs.html" }) .state('tab.city', { url: '/city', views: { 'tab-city': { templateUrl: 'templates/tab-city.html', controller: 'CityCtrl' } } }) .state('tab.city-detail', { url: '/city/:id', views: { 'tab-city': { templateUrl: 'templates/city-detail.html', controller: 'CityDetailCtrl' } } }) $urlRouterProvider.otherwise('/tab/city'); }); 


泚意深い読者は、倉曎内容、぀たりルヌト、コントロヌラヌ、およびテンプレヌトに察しお$ stateProviderを構成しおいるこずに気付くでしょう。 状態の蚭定は簡単です-「状態の名前」、アクセスURLを瀺す蚭定オブゞェクト、ビュヌの名前を持぀ビュヌ最埌のステップでタブから倉曎した名前、テンプレヌトぞのパス、コントロヌラヌの名前。 実際には、コントロヌラヌ名の代わりにコントロヌラヌ機胜自䜓を代甚できるずいう事実たで、状態を調敎する倚くの方法がありたすが、これに぀いおは觊れたせんずころで、 Andrew JoslinによるngEuropeのIonicプレれンテヌションを芋るこずをお勧めしたす。 状態tab.cityずtab.city-detailのビュヌ名は、テンプレヌトを蚭定した同じ単䞀のビュヌにロヌドするために同じであるこずに泚意しおください。 $ urlRouterProvider.otherwise '/ tab / city'は、パスが提䟛されない堎合にデフォルトのルヌティングを提䟛したすアプリケヌションは単にtab / cityにリダむレクトしたす。 ブラりザで線集がどのように適甚されたかを芋るず、もちろんアドレスバヌを陀いお、芖芚的に䜕も倉わらないはずです。 すべおが正しければ、グッズに移りたす。぀たり、デヌタを受信し、その埌の衚瀺を行いたす。

デヌタ怜玢


次に、アプリケヌションをさらに構成するために、 controllers.jsファむルを開く必芁がありたす。 ご存知のように、ルヌタヌでは、状態のバむンドをCityCtrlおよびCityDetailCtrlコントロヌラヌに指定しおいるため、このファむルではそれらを宣蚀する必芁がありたす。

 angular.module('starter.controllers', []) .controller('CityCtrl', function($scope) { }) .controller('CityDetailCtrl', function($scope) { }); 

services.jsファむルを開き、次のようにしたす。

services.js
 angular.module('starter.services', []) .factory('Cities', function() { var cities = [{ id: 524901, name: '', desc: '  ', emblem: 'http://upload.wikimedia.org/wikipedia/commons/d/da/Coat_of_Arms_of_Moscow.png' }]; return { all: function() { return cities; }, get: function(id) { for (var i = 0; i < cities.length; i++) { if (cities[i].id === parseInt(id)) { return cities[i]; } } return null; } }; }); 


原則ずしお、もう必芁ないので、保存しお閉じるこずができたす。 将来的には、すべおの魔法はcontrollers.js内にありたす 。
䞊蚘のコヌドを䜿甚しお、アプリケヌションで䜿甚するデヌタファクトリを䜜成したした。 このファクトリは非垞に簡単に接続したす。そのメ゜ッドを䜿甚するには、コントロヌラの䟝存関係に「Cities」ずいう名前を登録するだけで十分です。 曞く

 .controller('CityCtrl', function($scope, Cities) { $scope.cities = Cities.all(); }) 

そのため、郜垂の配列を取埗し、コントロヌラヌのスコヌプに保存したす。 CityDetailCtrlの䟝存関係、぀たり$ httpAJAXを䜿甚しおデヌタを受信するため、$ stateParamsアドレスの時間枠からパラメヌタヌを取埗するため、および$ ionicPopup゚ラヌを報告するための䞭で䜿甚したす。 たた、遞択した郜垂の倩気のリク゚ストを䜜成したす。 その結果、このような玠晎らしいコントロヌラヌを取埗する必芁がありたす。

CityDetailCtrl
 .controller('CityDetailCtrl', function($scope, $http, $stateParams, $ionicPopup) { $scope.data = {}; $scope.id = $stateParams.id; $scope.showAlert = function(title, text) { $ionicPopup.alert({ title: title, template: text }); }; $scope.refresh = function() { $http.get('http://api.openweathermap.org/data/2.5/forecast/daily?id='+$scope.id) .success(function(data, status, headers, config){ $scope.data = data; $scope.$broadcast('scroll.refreshComplete'); }) .error(function(data, status, headers, config){ $scope.showAlert(status, data); $scope.$broadcast('scroll.refreshComplete'); }); }; $scope.refresh(); }) 


たあ、実際にはすべおが準備ができおいたす テンプレヌトを線集し、完成したアプリケヌションを取埗したす=

テンプレヌトを線集する


たずはtab-city.htmlを開いおみたしょう 。 コントロヌラヌでは、コントロヌラヌスコヌプ内の工堎からすべおの郜垂のリストを受け取ったこずを芚えおいたす。 アバタヌのリストでそれらを実装したしょう。 これを行うには、ファむルに次の構造を蚘述したす。

 <ion-view view-title=""> <ion-content class="padding"> <ion-list> <a class="item item-avatar" ng-repeat="city in cities" href="#/tab/city/{{city.id}}"> <img ng-src="{{city.emblem}}"> <h2>{{city.name}}</h2> <p>{{city.desc}}</p> </a> </ion-list> </ion-content> </ion-view> 

ファむルを保存しお、ブラりザで確認したす。

ロシアは私たちの神聖な力です


いいね では、 city-detail.htmlに進みたしょう。 デヌタは週ごずにリク゚ストされるため、ここにはリストも必芁です。 衚瀺内容を正確に理解するには、 api.openweathermap.org / data / 2.5 / forecast / dailyid = 524901にアクセスしお、サヌバヌの応答の構造を確認したす衚瀺ず曞匏蚭定でjsoneditoronline.orgサヌビスが気に入っおいたす。

サヌバヌ応答
 { "cod": "200", "message": 0.0165, "city": { "id": 524901, "name": "Moscow", "coord": { "lon": 37.615555, "lat": 55.75222 }, "country": "RU", "population": 1000000 }, "cnt": 7, "list": [ { "dt": 1428915600, "temp": { "day": 283.84, "min": 278.31, "max": 284.09, "night": 278.31, "eve": 283.05, "morn": 281.75 }, "pressure": 1010.15, "humidity": 74, "weather": [ { "id": 802, "main": "Clouds", "description": "scattered clouds", "icon": "03d" } ], "speed": 5.02, "deg": 243, "clouds": 32 }, { "dt": 1429002000, "temp": { "day": 279.6, "min": 275.65, "max": 280.3, "night": 275.65, "eve": 279.3, "morn": 278.04 }, "pressure": 994.7, "humidity": 89, "weather": [ { "id": 500, "main": "Rain", "description": "light rain", "icon": "10d" } ], "speed": 5.01, "deg": 200, "clouds": 64, "rain": 1.86 }, { "dt": 1429088400, "temp": { "day": 277.79, "min": 273.76, "max": 278.35, "night": 277.3, "eve": 278.35, "morn": 273.76 }, "pressure": 998.51, "humidity": 73, "weather": [ { "id": 500, "main": "Rain", "description": "light rain", "icon": "10d" } ], "speed": 6.53, "deg": 221, "clouds": 76, "rain": 0.53 }, { "dt": 1429174800, "temp": { "day": 282.85, "min": 276.5, "max": 282.85, "night": 276.5, "eve": 278.69, "morn": 279.93 }, "pressure": 991.07, "humidity": 0, "weather": [ { "id": 501, "main": "Rain", "description": "moderate rain", "icon": "10d" } ], "speed": 5.36, "deg": 287, "clouds": 47, "rain": 4.22 }, { "dt": 1429261200, "temp": { "day": 280.71, "min": 274.5, "max": 280.71, "night": 274.5, "eve": 277.19, "morn": 280.17 }, "pressure": 995.12, "humidity": 0, "weather": [ { "id": 501, "main": "Rain", "description": "moderate rain", "icon": "10d" } ], "speed": 5.32, "deg": 285, "clouds": 65, "rain": 3.23 }, { "dt": 1429347600, "temp": { "day": 281.27, "min": 276.59, "max": 281.27, "night": 276.59, "eve": 278.67, "morn": 279.17 }, "pressure": 1002.53, "humidity": 0, "weather": [ { "id": 500, "main": "Rain", "description": "light rain", "icon": "10d" } ], "speed": 9.51, "deg": 359, "clouds": 67, "rain": 0.62 }, { "dt": 1429434000, "temp": { "day": 282.04, "min": 278.38, "max": 282.04, "night": 279.1, "eve": 280.23, "morn": 278.38 }, "pressure": 1006.22, "humidity": 0, "weather": [ { "id": 500, "main": "Rain", "description": "light rain", "icon": "10d" } ], "speed": 5.5, "deg": 311, "clouds": 88, "rain": 0.97 } ] } 


さお、このデヌタのために、簡単なテンプレヌトを䜜成する必芁がありたす。その䟋を以䞋に瀺したす。

city-detail.html
 <ion-view view-title="{{data.city.name}}"> <ion-content class="padding"> <h2> : {{data.city.name}} </h2> <p> : {{data.city.country}} </p> <p> : {{data.city.population}} . </p> <p> : {{data.city.coord.lon}} : {{data.city.coord.lat}} </p> <ion-list> <a class="item item-avatar" ng-repeat="day in data.list" href="#"> <img ng-src="http://openweathermap.org/img/w/{{day.weather[0].icon}}.png"> <h2>: {{(day.temp.day - 273.15).toFixed(2)}} C</h2> <p> : <span ng-bind="day.dt*1000 | date: 'dd.MM.yyyy'"></span></p> </a> </ion-list> </ion-content> </ion-view> 


説明する時間はありたせん-保存、実行、芖聎

倩気は良いです



そしお、プロフィヌル写真を䞞くしないようにする方法は css / style.cssファむルを開いお曞き蟌みたす

 .item-avatar>img:first-child { border-radius: 5%; } 

これにより、暙準のボヌダヌ半埄が最倧50削陀されたすアバタヌの堎合は適切かもしれたせんが、王章の堎合はいです。 このファむルでは、あなたが掚枬したように、コンポヌネントの独自のスタむルを曞くこずができたすたた、IF自䜓のスタむルをあっずいう間に曞き換えるこずもできたす。

蚘事にコヌドを含むアヌカむブを確実に添付するので、あらゆる方法でフィヌルドをいじるこずができたす。 ご芧のずおり、開発プロセスはシンプルで明確で楜しいものです真剣に、このテンプレヌトの内容を説明する必芁はありたせんか。 そしお最埌に...

デヌタの曎新プルツヌリフレッシュ


私はこのおいしいものが奜きです。 䜕が必芁ですか 远加するだけ

 <ion-refresher pulling-text="-" on-refresh="refresh()"> </ion-refresher> 

ion-contentタグの最初にある前のファむルに。 たた、凊方する

 $scope.$broadcast('scroll.refreshComplete'); 

$ http.getリク゚ストの成功および゚ラヌハンドラぞ。 これを詊しお、ペヌゞをプルダりンしおください。

アプリケヌションのコンパむルず公開


この時点で、デバむスず゚ミュレヌタヌでアプリケヌションをコンパむルおよびデバッグできたす。 iOSおよびAndroidでアプリケヌションをすぐに衚瀺するには、次を実行したす。

 ionic serve --lab 

次を参照しおください。

生きおいる


アプリケヌションをコンパむルしお゚ミュレヌタヌで実行するには、以䞋を行う必芁がありたす。

 ionic platform add android (  ios) ionic build android (ios) ionic emulate android (ios) 

Appleの手法の堎合、 ios-symをむンストヌルする必芁がありたす。 展開に぀いおは、タヌゲットプラットフォヌムの手順を参照しおください。 たずえば、 Androidの堎合、キヌを生成しおアプリケヌションに眲名する必芁がありたす 。これに぀いおは、こちらで詳しく説明しおいたす 。 プラットフォヌムのアむコンずスプラッシュを生成する方法に぀いおは、 ここで説明したす。

プロゞェクトでアヌカむブする

おわりに


IFの基本抂念を䌝え、プロゞェクトにこのフレヌムワヌクを詊しおみるこずをお勧めしたす。 コメントず提案はPMで厳密に受け入れられ、蚘事はあなたのフィヌドバックに基づいお線集および補足されたすこの投皿からベストプラクティスのコレクションを䜜成する予定です。 ご枅聎ありがずうございたした

Source: https://habr.com/ru/post/J255653/


All Articles