Vue Getting Started with Weather Forecast

Vue Getting Started with Weather Forecast

This article example shares the specific code of Vue to implement weather forecast for your reference. The specific content is as follows

Rendering

Implementation Code

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>God knows</title>
    <link rel="stylesheet" href="css/reset.css" />
    <link rel="stylesheet" href="css/index.css" />
    <style>
      [v-cloak] {
        display: none;
      }
    </style>
  </head>

  <body>
    <div class="wrap" id="app">
      <div class="search_form">
        <div class="logo"><img src="img/logo.png" alt="logo" /></div>
        <div class="form_group">
          <input
            type="text"
            class="input_txt"
            placeholder="Please enter the weather you want to query"
            v-model="city"
            @keyup.enter="searchWeather"
          />
          <button class="input_sub" @click="searchWeather">Search</button>
        </div>
        <div class="hotkey">
          <a href="javascript:;" @click="searchWeatherByCity('北京')">北京</a>
          <a href="javascript:;" @click="searchWeatherByCity('Shanghai')">Shanghai</a>
          <a href="javascript:;" @click="searchWeatherByCity('Guangzhou')">Guangzhou</a>
          <a href="javascript:;" @click="searchWeatherByCity('深圳')">深圳</a>
        </div>
      </div>
      <ul class="weather_list" v-cloak="block">
        <li v-for="item in weatherList">
          <div class="info_type">
            <span class="iconfont">{{item.type}}</span>
          </div>
          <div class="info_temp">
            <b>{{item.low}}</b>
            ~
            <b>{{item.high}}</b>
          </div>
          <div class="info_date"><span>{{item.date}}</span></div>
        </li>
      </ul>
    </div>
    <!-- Development version, including helpful command line warnings -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <!-- Axios online address provided by the official website-->
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <!-- Own js -->
    <script src="./js/main.js"></script>
  </body>
</html>

index.css

body{
    font-family:'Microsoft YaHei';   
}
.wrap{
    position: fixed;
    left:0;
    top:0;
    width:100%;
    height:100%;
    /* background: radial-gradient(#f3fbfe, #e4f5fd, #8fd5f4); */
    /* background:#8fd5f4; */
    /* background: linear-gradient(#6bc6ee, #fff); */
    background:#fff;

}
.search_form{
    width:640px;
    margin:100px auto 0;
}
.logo img{
    display:block;
    margin:0 auto;
}
.form_group{
    width:640px;
    height:40px;
    margin-top:45px;
}
.input_txt{
   width:538px;
   height:38px;
   padding:0px;
   float:left;
   border:1px solid #41a1cb;
   outline:none;
   text-indent:10px;
}

.input_sub{
    width:100px;
    height:40px;
    border:0px;
    float: left;
    background-color: #41a1cb;
    color:#fff;
    font-size:16px;
    outline:none;
    cursor: pointer;
    position: relative;
}
.input_sub.loading::before{
    content:'';
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background: url('../img/loading.gif');
}

.hotkey{
    margin:3px 0 0 2px;
}

.hotkey a{
    font-size:14px;
    color:#666;
    padding-right:15px;
}
.weather_list{
    height:200px;
    text-align:center;
    margin-top:50px;
    font-size:0px;
}
.weather_list li{
    display:inline-block;
    width:140px;
    height:200px;
    padding:0 10px;
    overflow: hidden;
    position: relative;
    background:url('../img/line.png') right center no-repeat;
    background-size: 1px 130px;
}

.weather_list li:last-child{
    background:none;
}


.info_date{
    width:100%;
    height:40px;
    line-height:40px;
    color:#999;
    font-size:14px;
    left:0px;    
    bottom:0px;    
    margin-top: 15px;
}
.info_date b{
    float: left;
    margin-left:15px;
}

.info_type span{
    color:#fda252;
    font-size:30px;
    line-height:80px;
}
.info_temp{
    font-size:14px;  
    color:#fda252;
}
.info_temp b{
    font-size:13px;
}
.temp .iconfont {
    font-size: 50px;
  }

reset.css

body,ul,h1,h2,h3,h4,h5,h6{
    margin: 0;
    padding: 0;
}
h1,h2,h3,h4,h5,h6{
    font-size:100%;
    font-weight:normal;
}
a{
    text-decoration:none;
}
ul{
    list-style:none;
}
img{
    border:0px;
}

/* Clear floating to solve margin-top collapse*/
.clearfix:before,.clearfix:after{
    content:'';
    display:table;    
}
.clearfix:after{
    clear:both;
}
.clearfix{
    zoom:1;
}

.fl{
    float:left;
}
.fr{
    float:right;
}

main.js

/*
  Request address: http://wthrcdn.etouch.cn/weather_mini
  Request method: get
  Request parameter: city (city name)
  Response content: Weather information 1. Click Enter 2. Query data 3. Render data */
var app = new Vue({
    el: "#app",
    data: {
        city: '',
        weatherList: []
    },
    methods: {
        searchWeather() {
            if (this.city == '') {
                alert("Please enter a city!");
            } else {
                var that = this;
                axios.get('http://wthrcdn.etouch.cn/weather_mini?city=' + that.city).then(function (response) {
                    if (response.data.status == 1002) {
                        alert("The city you entered is incorrect! Please re-enter!");
                        that.city = '';
                    } else {
                        that.weatherList = response.data.data.forecast;
                        console.log(response.data);
                    }
                }).catch(function (error) {
                    console.log(error);
                })
            }
        },
        searchWeatherByCity(city) {
            this.city = city;
            this.searchWeather();
        }
    },
})

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Detailed explanation of how to use Vue to load weather components
  • Vue implements a small weather forecast application
  • Vue implements weather forecast function
  • How to use webSocket to update real-time weather in Vue

<<:  Summary of ten Linux command aliases that can improve efficiency

>>:  Batch replace part of the data of a field in Mysql (recommended)

Recommend

Linux 6 steps to change the default remote port number of ssh

The default ssh remote port in Linux is 22. Somet...

Use of align-content in flex layout line break space

1. The effect diagram implemented in this article...

Practical TypeScript tips you may not know

Table of contents Preface Function Overloading Ma...

How to use Vue+ElementUI Tree

The use of Vue+ElementUI Tree is for your referen...

Complete steps for using Echarts and sub-packaging in WeChat Mini Program

Preface Although the holiday is over, it shows up...

Detailed explanation of psql database backup and recovery in docker

1. Postgres database backup in Docker Order: dock...

Rounding operation of datetime field in MySQL

Table of contents Preface 1. Background 2. Simula...

Summary of shell's method for determining whether a variable is empty

How to determine whether a variable is empty in s...

A brief discussion on the principle of js QR code scanning login

Table of contents The essence of QR code login Un...

Detailed explanation of the watch listener example in vue3.0

Table of contents Preface The difference between ...

MySQL tutorial thoroughly understands stored procedures

Table of contents 1. Concepts related to stored p...

In-depth explanation of MySQL isolation level and locking mechanism

Table of contents Brief description: 1. Four char...

Newbies quickly learn the steps to create website icons

<br />Original URL: http://www.lxdong.com/po...