授人以魚不如授人以漁
這裏只講邏輯(僞代碼),不寫代碼。
需求:獲取天氣數據
//條件:
var appkey='xxxxxx';
var url='https://way.jd.com/jisuapi/weather?city=xxx&cityid=xxxx&citycode=xx&appkey=appkey';
則需要:city cityid citycode
第一步:獲取所有的地區信息,這樣就可以城市級聯了
var url='https://way.jd.com/jisuapi/weather1?appkey=9b066f875202e509f662b86efdc990d8';
//將獲取到的信息存到一個districts變量裏面
var districts=http.get(url);
//通常一個城市對象的數據結構是這樣的
district={
citycode:'101010100',
city:'北京',
cityid:'1',
parentid:'0'
}
citycode:城市編號,如果是省份則該屬性爲空;
city:城市的名稱;
cityid:城市id
parentid:表示它的上一級的cityid,爲0,則代表沒有上一級,則是直轄市或者省份;
若一個地區對象恰好citycode爲空,且parentid爲0,則該對象一定是省份
例如:
province={ city={
"citycode":"", "citycode":"101220601"
"city":"安徽", "city":"安慶",
"cityid":"2", "cityid":"35",
"parentid":"0" "parentid":"2"
}, }
安徽是省所以citycode爲空;安慶是安徽的市,所以安慶的parentid是安徽的cityid。
第二步:通過傳入parentid獲取所有parentid相同的地區信息
傳入parenid=0,則是獲取所有的省份、直轄市
傳入parentid爲81,即獲取cityid=81(惠州),所有的縣、區
getSubdistricts(districtid: string): Promise<Array<DistrictInfo>> {
return new Promise((resolve, reject) => {
this.getDistrictInfos()
.then(() => {
this.wxDistrictInfos.forEach(
districtinfo => {
if (districtinfo.parentid === districtid) {
subdistricts.push(districtinfo);
}
});
resolve(subdistricts);
})
.catch(() => reject()
);
});
第三步:通過城市名獲取citycode
getCityObj(cityName){
//....
var obj={
"citycode":"xxx",
"city":"xxx",
"cityid":"xxx",
"parentid":"xxx"
}
return obj;
}
第四步:返回正確格式的url
getUrl( cityObj ){
return 'https://way.jd.com/jisuapi/weather?
+ 'city=' + district.city
+ '&cityid=' + district.cityid
+ '&citycode=' + district.citycode
+ '&appkey=9b066f875202e509f662b86efdc990d8';
}
第五步:通過城市對象獲取天氣數據
getWeather( cityObj){
this.get( getUrl (cityObj).then(res=>{
console.log( res)
}
}