Axios와 Vue를 사용하여 간단한 날씨 쿼리를 구현하는 방법은 무엇입니까? 다음 글에서는 vue+axios를 사용하여 간단한 날씨 쿼리를 구현하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다!
먼저 렌더링을 살펴보겠습니다. 원리는 매우 간단합니다. 인터페이스 호출, 데이터 표시, 인터페이스 레이아웃입니다.
위를 통해, 올바른 도시 이름을 입력하면 쿼리에 다음 4일 동안의 날씨와 어제와 오늘의 총 6일 날씨가 표시되는 것을 볼 수 있습니다. 잘못된 이름을 입력하면 메시지가 표시되고 입력 필드가 지워집니다. [관련 추천 : vuejs 영상 튜토리얼, web front-end development]
1 vue 프로젝트이기 때문에 소개가 필요합니다. 공식 홈페이지 : vue 공식 웹사이트, 우리는 cdn 방법을 사용하여 가져옵니다:
<!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
2. axios를 사용하여 데이터 요청을 보냅니다. axios 공식 웹사이트axios , 우리는 또한 cdn 방법을 사용하여 다음을 소개합니다:
<!-- axios --> <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
3. 인터페이스 스타일과 프롬프트 부분을 완성하는 부분입니다. 공식 웹사이트: elementUIvue2.x 버전을 사용하고 있습니다:
<!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></script>
먼저 상단에 검색 표시줄이 있고 아래에 결과 표시 부분이 있는 인터페이스를 레이아웃합니다. 인터페이스를 아름답게 하기 위해 다음과 같은 스타일 디자인을 수행합니다.
<div id="app"> <div class="head"> <el-input v-model="city" style="width: 60%;" placeholder="请输入城市名"></el-input> <el-button type="primary" @click="btn">查询</el-button> <p v-if="show" style="display: block;margin-top: -50x;">您查找的城市为:<span>{{nowcity}}</span> ,现在温度为:<span>{{wendu}}<sup>。</sup></span>,感冒情况:<span>{{ganmao}}</span></p> </div> <div class="bottom"> <div v-if="show" class="seeday"> </div> </div> </div>
인터페이스 레이아웃이 완료된 후 js 로직 부분을 진행해야 합니다.
1. 필요한 마운팅 포인트와 데이터 저장소가 필요한 첫 번째 빌드 vue:* {
margin: 0;
padding: 0;
box-sizing: border-box;}ul>li {
list-style: none;}#app {
width: 900px;
height: 700px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
box-shadow: 1px 1px 15px #dfdfdf;}.head {
width: 100%;
height: 20%;
line-height: 70px;
text-align: center;}.head p span {
font-weight: 400;
font-size: 18px;}.bottom {
width: 100%;
height: 80%;
overflow: auto;}.seeday {
width: 300px;
height: 200px;
box-shadow: 1px 1px 15px #dfdfdf;
display: inline-block;
margin-left: 70px;
margin-top: 20px;
margin-bottom: 20px;}.seeday span {
display: inline-block;
width: 100%;
height: 50px;
border-bottom: 1px solid #000;
text-align: center;
font-size: 20px;
font-weight: 600;
line-height: 50px;}.seeday ul {
margin-left: 10px;}.seeday ul>li {
width: 100%;
height: 30px;}
2. 쿼리 버튼을 클릭할 때 수행되는 작업:var vue = new Vue({
// 挂载点
el: '#app',
data() {
return {
// 收入框
city: '',
// 存储近几天以及今天的天气
list: [],
// 昨天的天气
yesterday: [],
// 是否显示
show: false,
// 当前搜索的城市
nowcity: '',
// 现在的温度
wendu: '',
// 感冒情况
ganmao: ''
}
},
})
index.html
btn() { //判断输入框是否为空 if (this.city == '') { this.$message({ message: '请输入城市名', type: 'error' }); } else { //axios进行请求的擦擦送 axios.get('http://wthrcdn.etouch.cn/weather_mini?city=' + this.city).then(res => { //返回状态正常 if (res.status == 200) { console.log(res.data) //如果查询城市状态异常 if (res.data.desc == "invilad-citykey") { this.$message({ message: '请输入正确的城市名', type: 'error' }); //输入框置空 this.city = '' } else { this.$message({ message: `共查找到 ${(res.data.data.forecast).length+1} 条数据`, type: 'success' }); //成功时候显示查询到的数值 this.show = true this.nowcity = res.data.data.city this.wendu = res.data.data.wendu this.ganmao = res.data.data.ganmao this.yesterday = res.data.data.yesterday this.list = res.data.data.forecast } } //请求发送异常 }).catch(err => { this.$message({ message: '服务异常,请稍后重试', type: 'error' }); }) } }index.css
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>天气查询</title> <!-- 引入自定义的css --> <link rel="stylesheet" href="./index.css"> </head> <body> <div id="app"> <div> <el-input v-model="city" style="width: 60%;" placeholder="请输入城市名"></el-input> <el-button type="primary" @click="btn">查询</el-button> <p v-if="show" style="display: block;margin-top: -50x;">您查找的城市为:<span>{{nowcity}}</span> ,现在温度为:<span>{{wendu}}<sup>。</sup></span>,感冒情况:<span>{{ganmao}}</span></p> </div> <div> <div v-if="show"> <span>{{yesterday.date}}</span> <ul> <li>风力:{{yesterday.fl}}</li> <li>风向:{{yesterday.fx}}</li> <li>高温:{{yesterday.high}}</li> <li>低温:{{yesterday.low}}</li> <li>天气:{{yesterday.type}}</li> </ul> </div> <div v-for="(item,index) in list" :key="index"> <span>{{item.date}}</span> <ul> <li>风力:{{item.fengli}}</li> <li>风向:{{item.fengxiang}}</li> <li>高温:{{item.high}}</li> <li>低温:{{item.low}}</li> <li>天气:{{item.type}}</li> </ul> </div> </div> </div> <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <!-- axios --> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <!-- 引入自定义的js --> <script src="./index.js"></script> </body> </html>index.js
* { margin: 0; padding: 0; box-sizing: border-box; } ul>li { list-style: none; } #app { width: 900px; height: 700px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); box-shadow: 1px 1px 15px #dfdfdf; } .head { width: 100%; height: 20%; line-height: 70px; text-align: center; } .head p span { font-weight: 400; font-size: 18px; } .bottom { width: 100%; height: 80%; overflow: auto; } .seeday { width: 300px; height: 200px; box-shadow: 1px 1px 15px #dfdfdf; display: inline-block; margin-left: 70px; margin-top: 20px; margin-bottom: 20px; } .seeday span { display: inline-block; width: 100%; height: 50px; border-bottom: 1px solid #000; text-align: center; font-size: 20px; font-weight: 600; line-height: 50px; } .seeday ul { margin-left: 10px; } .seeday ul>li { width: 100%; height: 30px; }
위 내용은 간단한 날씨 쿼리를 구현하기 위해 axios 및 vue를 사용하는 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!