一步一步构建Angular应用|一步一步构建Angular应用 Vol.2 - 天气情况
序言
目的
通过第三方平台的天气API,使用Angular做一个很简单的天气信息显示的应用。
前情提要
我们使用gulp构建了一个基本的angular应用框架,并且通过了gulp-connect可是快速的进行部署开发的环境。
现在大致的目录结果是如下图:
文章图片
当前的目录结构 确定目的
我们将使用http://www.heweather.com/提供的免费天气API来做一个简单的显示天气信息的应用。
我们的代码结构
原则
原则上我们会使用"围绕模块的方法来组织":
- 每一个功能模块都会有一个*.module.js用于声明当前模块的名称与引入的其他模块的关系;
- 如果当年模块有router功能则,则有一个*.router.js我文件用户声明ui-router相关的state;
- 当前模块相关的controller、service、directive都放置在该模块的文件夹下。
\\原有的app.module.js
(function ()
{
'use strict';
angular
.module('app', [
'ui.router'
])
.config(routeConfig);
;
routeConfig.$inject = ['$stateProvider', '$urlRouterProvider','$locationProvider'];
function routeConfig($stateProvider, $urlRouterProvider, $locationProvider)
{$stateProvider
.state('home', {
url: '/home',
templateUrl: 'home.html',
controller: 'IndexController',
controllerAs: 'vm'
});
}
})();
将ui-router部分分离出来命名为index.router.js
\\index.router.js
(function ()
{
'use strict';
angular
.module('app')
.config(routerConfig);
routerConfig.$inject = ['$stateProvider', '$urlRouterProvider','$locationProvider'];
function routerConfig($stateProvider, $urlRouterProvider, $locationProvider)
{$stateProvider
.state('home', {
url: '/home',
templateUrl: 'home.html',
controller: 'IndexController',
controllerAs: 'vm'
});
}})();
额外的需要在index.html引入新的文件
建立新的模块 目的 我们单独将显示天气部分的功能为一个独立的模块,区别于其他模块。
声明模块文件及相应的配套文件 我们回顾下刚才的说明,我们首先先新建一个weather的文件夹,然后在weather.module.js文件中声明模块,在weather.router.js中声明路由,然后在新建相应的controller与service:
文章图片
增加weather模块后的目录结构 weather.module.js
通过使用module(name,[])的setter方法,向angular上下文中初始化一个名为app.weather的module。
(function ()
{
'use strict';
angular
.module('app.weather', [
'ui.router'
]);
})();
weather.router.js 路由配置文件
(function ()
{
'use strict';
angular
.module('app.weather')
.config(routerConfig);
routerConfig.$inject = ['$stateProvider', '$urlRouterProvider'];
function routerConfig($stateProvider, $urlRouterProvider)
{$stateProvider
.state('weather', {
url: '/weather',
templateUrl: 'scripts/weather/index.html',//注意index.html的路径写法
controller: 'IndexController',
controllerAs: 'vm'
});
}})();
index.controller.js 的空文件
(function ()
{
'use strict';
angular
.module('app.weather')
.controller('IndexController', IndexController);
function IndexController()
{
var vm = this;
}})();
weather.service.js
(function(){
'use strict';
angular
.module('app.weather')
.factory('WeatherService', WeatherService);
WeatherService.$inject = ['$http', '$state'];
function WeatherService($http, $state) {
return {};
}
})();
最后需要在index.html中增加引入,并且在index.module.js中引入app.weather的模块.
\\index.module.js
(function ()
{
'use strict';
angular
.module('app', [
'ui.router',
'app.weather']);
})();
然后我们在地址栏里输入就可以看到我们在index.html输入的内容了
\\index.html
天气情况
文章图片
weather模块加载正常 为和风填写编写service 天气API形式
文章图片
和风天气API
则目标API地址便是 https://api.heweather.com/x3/weather?cityid=城市ID&key=你的认证key
我们通过查阅知道上海的城市ID 是 CN101020100,再查一下自己的认证key
通过curl测试一下 我们通过curl的命令来测试一下这个api是不是可用,在mac控制端中输入
https://api.heweather.com/x3/weather?cityid=CN101020100&key=你的KEY
文章图片
api返回结果 开始书写service weather.service的目的是从和风天气的api中获取一个城市天气信息,并返回给controller使用。
首先对WeatherService中注入$http
WeatherService.$inject = ['$http'];
function WeatherService($http) {
}
然后,我们使用$http.post方法结合then回调函数调用和风天气的API
WeatherService.$inject = ['$http'];
function WeatherService($http) {
return {
getWeather:function(){
return $http
.post("https://api.heweather.com/x3/weather?cityid=CN101020100&key=替换成你的KEY")
.then(function(response) {
return response.data;
// controller层获取的response
});
}
};
}
在Controller层调用Service中的API。
我们在Controller中注入WeatherService后,我们编写一个showWeather的函数用于在controller层调用和风天气的API。
function IndexController(WeatherService)
{
var vm = this;
vm.city = "";
vm.temp = "";
vm.showWeather = showWeather;
function showWeather(){WeatherService.getWeather().then(function(data){
vm.city = data["HeWeather data service 3.0"][0].basic.city;
vm.temp = data["HeWeather data service 3.0"][0].now.tmp;
});
}
}
视图层调用结果
最后我们编写视图层
天气情况
- 城市
- {{vm.city}}
- 温度
- {{vm.temp}} 摄氏度
大功告成 在终端输入gulp运行开发服务器后,在浏览器输入http://127.0.0.1:8080/#/weather就可以看到下面的画面了。
文章图片
运行画面 点击按钮则可以立刻显示上海的气温啦。
文章图片
点击显示温度 下一期我们会做什么 下一期我们会继续完善这个天气应用,使用angular的指令来封装html层的一些组件。
推荐阅读
- angular2内置管道
- 也许第一步很难,但跨过去就好了
- Flutter的ListView
- 高度自律等于成功的第一步
- 走好每一步
- 构建App(一)(框架与结构)
- 高效纠错
- 如何在手机上查看测试vue-cli构建的项目
- 用Go构建区块链——3.持久化和命令行
- 运用flutter|运用flutter 构建一个发布版(release)APK