用vue和axios 寫一個QQ

html和Vue:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>QQ</title>
 <link rel="stylesheet" href="./qq.css">
</head>
<body>
<div class="app">
   <div class="app-one">
    <router-link to='/index'>消息</router-link>
    <router-link to='/about'>聯系人</router-link>
    <router-link to='/content'>動態</router-link>
    </div>
    <router-view></router-view>
</div>
<script src="vue.js"></script>
<script src="vue-router.js"></script>
<script src="axios.js"></script>
<script>
    var Index={
        template:`
                <div class="font">
                <ul>
                    <li v-for="value in fruList">
                        <img v-bind:src="value.img">
                        <span>{{value.name}}</span>
                        <p>{{value.inner}}</p>
                        <h6>{{new Date()|date()}}</h6> 
                    </li>
                </ul>
            </div>
        `,
        data:function(){
            return{
                fruList:null
            }
        },
        mounted:function(){
            var self=this;
            axios({
                method:'get',//發送數據的方式
                url:'fruit.json'
            }).then(function(resp){//請求成功
//                    console.log(resp)
                console.log(resp.data)
                 self.fruList=resp.data
            }).catch(function(err){//請求失敗
                console.log(err)
            })
        }
    }
    var About={
        template:`
            <div>
               <ul class="router-good">
                    <li>
                        <router-link to="/about/user">好友</router-link>
                    </li>
                    <li>
                        <router-link to="/about/login">群聊</router-link>
                    </li>
                </ul>
                <router-view></router-view>
            </div>
        `
    }
    var User={
        template:`
        <div class="router" >
                <ul v-for="(value,index) in concater">
                    <li @click="chg(index)">
                        <span>&gt;</span>
                        {{value.two}}
                    </li>
                
                <ul class="ul-two"v-show="concater[index].flag">
                    <li>
                        <img :src="value.three">
                        <b>{{value.four}}</b>
                        <p>{{value.five}}</p>
                    </li>
                </ul>
            </ul>
        </div>

        `,
        methods:{
            chg:function(index){  
                this.concater[index].flag=!this.concater[index].flag 
            }
        },
        data:function(){
            return{
                concater:null
            }
        },
        mounted:function(){
        var that=this;
        axios({
             method:"get",
             url:"about.json"
         }).then(function(resp){
             console.log(resp.data)
             that.concater=resp.data; 
         }).catch(function(err){
             console.log(err)
         })
       }
    }
    var Login={
        template:`
            <ul class="router-a">
                <li v-for="(value,index) in con">
                    <span>&gt;</span>
                    <h5 
                    @click="btn(index)">{{value.one}}</h5>
                <ul v-show="con[index].flag">
                    <li>
                    <img :src="value.two">
                    <p>{{value.three}}</p>
                    </li>
                </ul>
                </li>
            </ul>
        `,
        methods:{
            btn:function(index){    
                this.con[index].flag=!this.con[index].flag 
            }
        },
        data:function(){
            return{
                con:null
            }
        },
       mounted:function(){
          var good=this;
        axios({
             method:"get",
             url:"content.json"
         }).then(function(resp){
             console.log(resp.data)
             good.con=resp.data; 
         }).catch(function(err){
             console.log(err)
         })
       }
    }
    var Content={
        template:`
            <div class="d-img">
               <img src="images/QQ圖片20180926081602.png">
               <img src="images/QQ圖片20180926082143.png">
               <img src="images/QQ圖片20180926103256.png">
               <img src="images/QQ圖片20180926103433.png">
            </div>
        `
    }
    const routes=[
        {path:'/',component:Index},
        {path:'/index',component:Index},
        {path:'/about',component:About,
        children:[
            {path:'/',component:User},
            {path:'user',component:User},
            {path:'login',component:Login},
        ]
        },
        {path:'/content',component:Content}
    ]
    const router=new VueRouter({
        routes:routes
    })
    //過濾器
   Vue.filter('date',function(data){
       return data.getHours()+":"+data.getMinutes();
   })
    new Vue({
        el:".app",
        router:router
    })
</script>
</body>
</html>

css:

*{
    margin:0;
    padding: 0;
    list-style: none;
}
body{
    background: #999;
}
a{
    text-decoration: none;
}
.app{
    width:278px;
    background: white;
    height:525px;
    margin:0 auto;
    background: url(images/u=1738230424,3160324865&fm=26&gp=0.jpg) center;
}
.app-one{
      width:278px;
     overflow: hidden;
     border-bottom: 1px solid #efefef;
}
.app .router-link-active{
    border-bottom:2px solid #cb0816;
    color:#cb0816;
}
.app-one a{
    width:92.67px;
    float: left;
    display: block;
    text-align: center;
    line-height: 39px;
    font-size:16px;
    color:#909090;
}
.router{
    width:278px;
    overflow: hidden;
}
.router span{
    color:#909090;
}
.router li:nth-child(1){
    margin-top:15px;
}
.router li{
    line-height:30px;
    font-size:13px;
    color:black;
    border:none;
    font-weight: 100;
    margin-left: 28px;
    margin-bottom: 15px;
}
 .router ul li:hover{
    background:rgba(0,0,0,.2);
}
.router .ul-two li{
    height:60px;
    margin-top: -18px;
}
.router .ul-two li:hover{
    background:rgba(0,0,0,.2);
}    
.router .ul-two li img{
    border-radius: 50%;
   width:50px;
    height:50px;
    margin-top:10px;
    margin-left:10px;
}
.router .ul-two li b{
    font-size: 15px;
    text-align: center;
    margin-top: -62px;
    width:50px;
    display: block;
    margin-left:69px;
    font-weight: 100;
}
.router .ul-two li p{
    font-size: 13px;
    color:#909090;
    width:150px;
    margin-left:76px;
    margin-top: -4px;
    font-weight: 100;
}
.router-good{
    width:278px;
    overflow: hidden;
}
.router-good li{
    font-size: 14px;
    font-weight: 100;
    width:80px;
    margin-left:29px;
    float: left;
    margin-top: 10px;
}
.router-good ul li:hover{
    background:rgba(0,0,0,.2);
}
.router-good li a{
    color:#909090;
    width:20px;
    height:20px;
}
.router-good .router-link-active{
    color: #de0f1e;
    background: #fff8f8;
}
.router-a{
    width:278px;
    overflow: hidden;
}
.router-a li:nth-child(1){
    margin-top:15px;
}
.router-a li{
    line-height:30px;
    font-size:13px;
    color:black;
    border:none;
    font-weight: 100;
    margin-left: 28px;
    margin-bottom: 15px;
}
.router-a ul:hover{
     background:rgba(0,0,0,.2);
}
.router-a span{
    color:#909090;
}
.router-a h5{
    margin-left: 19px;
    margin-top: -29px;
    font-weight: 100;
    font-size:13px;
}
.router-a ul{
    width:258px;
    overflow: hidden;
    margin-left: -21px;
    margin-top: -7px;
}
.router-a ul li img{
    width:30px;
    height:30px;
    border-radius: 50%;
    float: left;
}
.router-a ul li p{
    float:left;
    line-height:30px;
    margin-left: 10px;
    height: 30px;
}
.d-img img{
    width:136px;
    height:135px;
}
.font ul li{
    width:278px;
    height:60px;
    margin:10px 0px;
}
.font ul li:hover{
    background:rgba(0,0,0,.2);
}
.font ul li img{
    border-radius: 50%;
    width:50px;
    height:50px;
    margin-top:10px;
    margin-left:10px;
}
.font ul li span{
    font-size: 15px;
    text-align: center;
    margin-top: -50px;
    width:50px;
    display: block;
    margin-left:69px;
}
.font ul li:nth-child(2) span{
    color:red;
}
.font ul li p{
    font-size: 13px;
    color:#909090;
    width:150px;
    margin-left: 78px;
    margin-top: 2px;
    font-weight: 100;
}
.font ul li h6{
    text-align: right;
    margin-top:-37px;
    margin-left: 215px;
    width:50px;
    font-weight: 100;
    color:#909090;
}

json:
about.json:

  [
    {
    "two":"我的好友        1/1",
    "three":"images/QQ圖片20180925165220.jpg",
    "four":"梁萌",
    "five":"上傳了三張照片",
    "flag":true
    
},
{
    "two":"同學          1/1",
    "three":"images/QQ圖片20180925165451.jpg",
    "four":"二哥",
    "five":"上傳了五張張照片",
    "flag":false
    
},
{
    "two":"白名單        1/1",  "three":"images/2.jpg",
    "four":"王穎",
    "five":"上傳了9張照片",
    "flag":false
    
},
 {
    "two":"黑名單        1/1",
    "three":"images/QQ圖片20180925165402.jpg",
    "four":"大力",
    "five":"上傳了3張照片",
    "flag":false
    
}
]

content.json:

[
    {
    "one":"我的群聊      6/6",
    "two":"images/QQ圖片20180925165402.jpg",
    "three":"王大力粉絲群99+",
    "flag":true
},{
    "one":"我的多人聊天     10/15",
    "two":"images/QQ圖片20180925165326.jpg",
    "three":"哈哈哈!",
    "flag":false
}
]

效果:
消息:


聯系人:




動態:


?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容