vue 根据ajax 返回的key value值动态改变img的src

问题描述

我想根据后台返回来的json其中的一个数据,来动态改变img src的路径从而显示不同的图片

比如后台返回的是[{"ALARMNAME":"大风黄色预警"}] 那我就显示大风黄色预警的图片
[{"ALARMNAME":"暴雪黄色预警"}]那我就显示暴雪预警的图片

问题出现的环境背景及自己尝试过哪些方法

尝试了很多没成功

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>天气查询</title>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <link rel="stylesheet" href="../css/mui.min.css">
    <!-- 日期选择器 -->
    <link rel="stylesheet" href="../css/mui.picker.min.css">
    <style type="text/css">
    </style>
</head>
<body>
    <!-- 页面主体 -->
    <div id="weather" class="mui-content">
        <!-- 预警信号 -->
        <div  class="mui-control-content mui-active">
            <ul v-for="w in weatherwaring">
                <li>
                    <a>
                        <img src="../img/icon/weatherIcon/df-y.png">//想改变的路径
                        <div>
                            {{w.ALARMNAME}}//这里就是现实出来的信息想根据这个信息改变src路径
                            <p>{{w.PUBLISHTIME}}</p>
                        </div>
                    </a>
                    <ul>
                        <li>
                            <span>详情信息:
                                <p>{{w.CONTENT}}</p>
                            </span>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>    
</body>
<script src="../js/mui.min.js"></script>
<script src="../js/vue.2.5.17.js"></script>
<script src="../js/mui.picker.min.js"></script>
<!-- <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> -->
<script type="text/javascript">
    mui.init({
        //启用右滑关闭功能
        swipeBack: true,
    });

    new Vue({
        el: '#weather',
        data: {
            weatherwaring: null,
        },
        methods: {
            // 天气预警
            Get_YJweather: function() {
                var _this = this;
                mui.ajax('https://segmentfault.com/ask', {
                    data: {
                        timefrom: 'xxx',
                        timeto: 'xxx'
                    },
                    dataType: 'json', //服务器返回json格式数据
                    type: 'post', //HTTP请求类型
                    timeout: 50000, //超时时间设置为10秒;
                    success: function(res) {
                        _this.weatherwaring = JSON.parse(res);
                        console.log('请求成功' + res);
                    },
                    error: function(xhr, type, errorThrown) {
                        console.log('请求失败');
                    }
                });
            }
        }
    });
</script>
</html>

你期待的结果是什么?实际看到的错误信息又是什么?

最好能少改动一些代码是实现谢谢各位大神了

阅读 3.4k
2 个回答
new Vue({
        el: '#weather',
        data: {
            weatherwaring: null,
        },
        methods: {
            // 天气预警
            Get_YJweather: function() {
                var _this = this;
                mui.ajax('https://segmentfault.com/ask', {
                    data: {
                        timefrom: 'xxx',
                        timeto: 'xxx'
                    },
                    dataType: 'json', //服务器返回json格式数据
                    type: 'post', //HTTP请求类型
                    timeout: 50000, //超时时间设置为10秒;
                    success: function(res) {
                        _this.weatherwaring = JSON.parse(res);
                        _this.weatherwaring.forEach(function(item){
                            //ALARMNAME就是图片的地址
                            item.ALARMNAME = _this.getPic(item.ALARMNAME);
                        })
                        console.log('请求成功' + res);
                    },
                    error: function(xhr, type, errorThrown) {
                        console.log('请求失败');
                    }
                });
            },
            //根据名字获取相应的图片
            getPic: function(text){
                var _this = this;
                var imgUrl = ''
                switch(text) {
                    case '大风黄色预警':
                        imgUrl = '大风黄色预警图片地址';
                        break;
                    case '暴雪黄色预警':
                        imgUrl = '暴雪黄色预警图片地址';
                        break;
                }
                return imgUrl
            }
        }
    });

你这样的方式 最好的解决办法当然是后台 直接返回图片的url。 这才是最方便 最快的解决办法。
当然 如果要用你这样的方式的话 也不是不可以。 你可以新建一个文件,里面把所有要用到的图片先require 引进来。
然后组成一个对应的map 就是天气情况--> 天气图片 这样的键值对。 然后在你需要调用的地方(img 的src里面)直接 调用map.get('天气名称‘)

补充:
你可以新建一个function 里面直接用switch 或者if else 判断 天气名称,返回 天气对应的图片地址
然后src 里面 就写这个function

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题