欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vue学习笔记6-axios + vue / 案例:查询天气

程序员文章站 2022-07-04 11:58:11
...

axios 结合 vue 开发网络应用

例:

 <div id="app">
        <input type="button" value="获取" @click="getJoke">
        <p>{{ joke }}</p>
    </div>
    <!-- vue开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <!-- axios的在线地址 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.1.0/axios.min.js"></script>
    <!-- 二者没有依赖关系,先导入谁都没关系 -->
    <script>
        // 接口1:随机获取一条笑话
        // 请求地址:https://autumnfish.cn/api/jokes
        // 请求方法:get
        // 请求参数:无
        // 响应内容:随机笑话 
        var app = new Vue({
            el: "#app",
            data: {
                joke: "笑话",
            },
            methods: {
                getJoke: function() {
                    var that = this;
                    //把 this 存储起来,防止变化
                    axios.get("https://autumnfish.cn/api/joke")
                        .then(function(response) {
                            console.log(response);
                            //获取笑话的数据
                            that.joke = response;
                        }, function(err) {
                            console.log(err);
                            //错误处理
                        })
                }
            }
        })
    </script>
  1. axios 回调函数中的 this 已经发生改变,无法访问到 data 中的数据
  2. 把 this 保存起来,回调函数中直接使用保存的 this 即可
  3. 和本地应用最大的区别是改变了数据来源

案例:查询天气

html 代码:

<body>
    <div id="app">
        <div class="title">
            <span>(๑•̀ㅂ•́)و✧</span><span class="weath">&nbsp;Weather</span>
        </div>
        <div class="search">
            <input type="" name="" v-model="city" @keyup.enter="searchWeather" placeholder="请输入城市名来查询天气">
            <a href="javascript:;" class="search-btn" @click="searchWeather">搜 索</a>
            <ul class="recomme">
                <li @click="changeWeather('北京')">北京</li>
                <li @click="changeWeather('上海')">上海</li>
                <li @click="changeWeather('深圳')">深圳</li>
                <li @click="changeWeather('成都')">成都</li>
            </ul>
        </div>
        <div class="weather-result">
            <ul class="clearfix">
                <li v-for="item in weatherList">
                    <h3>{{ item.wea }}</h3>
                    <span class="temperator">最低{{ item.tem2 }}℃ 最高{{ item.tem1 }}</span>
                    <span class="date">{{ item.day }}</span>
                </li>
            </ul>
        </div>
    </div>
    <div class="band"></div>

    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="js/天气预报.js"></script>
</body>

js 代码

// 请求地址:http://wthrcdn.etouch.cn/weather_mini
// 请求方法:get
// 请求参数:city(城市名)
// 响应内容:天气信息

// 1.点击回车
// 2.查询数据
// 3.渲染数据

var app = new Vue({
    el: "#app",
    data: {
        city: "",
        weatherList: [],
    },
    methods: {
        searchWeather: function() {
            //保存this
            var that = this
                // 调用接口
            axios.get("http://www.tianqiapi.com/api?version=v9&appid=82136948&appsecret=q3atkYkJ&city=" + this.city).then(function(response) {
                // console.log(response);
                that.weatherList = response.data.data.slice(0, 5);
                //slice 返回数组的指定部分,从第0个开始往后五个
            }).catch(function(err) {})
        },
        changeWeather: function(city) {
            this.city = city
            this.searchWeather()
        }
    }
})