vue使用vue-router以及vue-resource查询天气以及历史上的今天

<!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>Document</title>
    <script src="https://lib.baomitu.com/vue/2.6.10/vue.min.js"></script>
    <script src="https://lib.baomitu.com/vue-router/3.0.3/vue-router.min.js"></script>
    <script src="https://lib.baomitu.com/vue-resource/1.5.1/vue-resource.min.js"></script>
    <link href="https://lib.baomitu.com/twitter-bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
    <style>
        .router-link-active {
            font-style: italic
        }
        .mian{
            text-align:center
        }
        
        .v-enter, .v-leave-to {
          opacity: 0; 
        }
        /* 当被transition包裹的元素在显示的过程中,enter-active是一直存在。而当被包裹元素消失的过程中,leave-active是一直存在的*/
      .v-enter-active, .v-leave-active {
            transition: opacity .5s;
      }

    </style>
</head>
<body>
    <div id="app">
        <!--挂载account模板-->
        <router-view></router-view>
    </div>

    <template id="account">
        
        <div class="row">
            <ul class="breadcrumb">
                    <!--两个router-link跳转,tag为li,跳转路径是根路径account-->
                    
                    <router-link to="/" tag="li" class="active">HOME</router-link>
                    <router-link to="/" tag="li" class="active">2019</router-link>
            </ul>
       
            <div class="table-responsive" style="margin-left:18px;">
                <div class="mian" >
                      <!--两个router-link跳转,切换模板页面-->
                    <h1><small>wellcome</small></h1>
                    <router-link to="/login" tag = "button" class="btn btn-primary">历史上的今天</router-link>
                    <router-link to="/register" tag = "button"  class="btn btn-primary">天气查询</router-link>
            
                </div>
                  <!--account模板里挂载两个子模板-->
                <router-view></router-view>
            </div>
        </div>
    </template>

    <template id="login">
        <!--默认隐藏v-if-->
        <div v-if = 'seen'>
            <p>历史上的今天 :{{new Date() | formatDate }}</p>
                <table  class="table table-condensed">
                        <thead>
                            <tr>
                                <td>年份</td>
                                <td>TITLE</td>
                            </tr>     
                        </thead>
                        <tbody class="t-body">
                            <tr v-for ="(p,index) in history" key = "{{p.id}}" >
                                <td>公元 {{p.year}} 年</td>
                                <td>{{p.title}}</td>  
                            </tr> 
                        </tbody>
                    </table>
        </div>
    </template>

    <template id="register">
      
        <div>
            <form class="form-horizontal" role="form">
                <div class="form-group">
                    <label for="lastname" class="col-sm-2 control-label">城市</label>
                    <div class="col-sm-10">
                    <input type="text" class="form-control" id="city" autocomplete="off" v-model ='city' @keyup.prevent.enter = 'reg' placeholder="请输入城市">
                    </div>
                </div>
            </form>

            <div v-if= "seen">
                <p>城市:{{city}}</p>
                <table  class="table table-condensed">
                    <thead>
                        <tr>
                            <td>日期</td>
                            <td>天气</td>
                            <td>风力</td>
                            <td>温度</td>
                        </tr>     
                    </thead>
                    <tbody class="t-body">
                        <tr v-for ="(p,index) in weathers" key = "{{p.id}}" >
                            <td>{{p.date}}</td>
                            <td>{{p.weather}}</td>
                            <td>{{p.wind }}</td>
                            <td>{{p.temp }}</td>
                            
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
  
    </template>
</body>
<script>
    //总的模板,下面两个模板是它的子模板
    var account= {
        template: "#account",
        data(){
            return{show: true}
        },
        methods:{

        },
    }

    //历史上的今天模板
    var login = {
        template : "#login",
        data(){
            return{history:[],code:"",seen:false}
        },
        filters:{
            formatDate:function(time){
                var day = time.getDate().toString().padStart(2,"0");
                var month = (time.getMonth()+1).toString().padStart(2,"0");
                return month + " 月 " + day + " 日"
            }
        },
        methods:{
        },
        //created生命周期获取数据,获取前判断sessionStorage里是否存在,存在直接拿,不存在调API
        created:function(){
            //sessionStorage
            var storage=window.sessionStorage;
            //获取sessionStorage是否有值
            var sto=storage.getItem("storageData");
            if(sto != "" && sto!= null){
                var stos=JSON.parse(sto);
                this.seen = true
                this.code=stos.code
                this.history =stos.data 
                console.info("localStorage history")
               
            }else{
                this.$http.jsonp("https://api.asilu.com/today/").then(function(res){
                if(res.body.code === 200){
                    this.seen = true
                    this.code=res.body.code
                    this.history =res.body.data 
                    console.info("查询history API")
                    try{
                        storage.setItem("storageData",JSON.stringify(res.body))
                    }catch(e){
                        localStorage.clear();
                        console.log("Error: 保存到本地存储失败")
                    }
                }
                   
                })
            } 
        }
    }
    //天气模板
    var register = {
        template : "#register",
        data(){
           return{city:"",weathers:[],seen:false} 
        },
        methods:{
            //input 回车调用方法获取天气
            reg:function(){
                console.info("weather start")
                var city = this.city
               
                this.$http.jsonp("http://api.asilu.com/weather/?city="+city).then(function(response){
                    if(response.status === 200){
                        this.weathers = response.body.weather
                        this.seen = true
                        this.city=response.body.city
                    }else{
                        alert("查询失败")
                    }
                   
                })
               
            }
        }
    }
    //实例化vueRouter
    var vueRouter = new VueRouter({
        routes:[
        {
            path:"/",
            component:account,
            children:[
                {path:"login",component:login},
                {path:"register",component:register}
            ]
        }
        ]
    })


    
    //实例化Vue
    var vm = new Vue({
        el : "#app",
        data:{
           
        },
        router:vueRouter,
        methods:{
           
        }

    })
</script>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值