
ã¿ãªããããã«ã¡ã¯ïŒ å°ãåãŸã§ã
ã³ã¡ã³ãã® 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ã€ã®äžèŠãªã¿ããåé€ããŸãããã
<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> <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ã§å³å¯ã«åãå
¥ããããèšäºã¯ããªãã®ãã£ãŒãããã¯ã«åºã¥ããŠç·šéããã³è£è¶³ãããŸãïŒãã®æçš¿ãããã¹ããã©ã¯ãã£ã¹ã®ã³ã¬ã¯ã·ã§ã³ãäœæããäºå®ã§ãïŒã ãæž
èŽããããšãããããŸããïŒ