【IMWeb训练营团队作业】

团队作业小组讨论后打算仿一个今日头条的小项目,我负责的部分是详情页部分,功能包括根据url传递的id获取对应的文章,在底部添加评论的功能,做的比较简单,页面样式方面没有进行细致的调整。

数据

由于时间比较紧没有做后端部分,直接从cnode社区提供的api获取一些数据。

用到的接口:

页面

主要是两个页面,一个是文章列表页,点击标题将携带文章id跳转到文章详情页。

代码

文章列表页
<div id="app">
        <ul class="content-list">
            <li v-for="item in dataList">
                <h4><a class="item-title" :href="'/detail.html?itemId='+item.id">{{item.title}}</a></h4>

                <p class="create-info">
                    <span class="time">{{item.create_at}}</span>
                    <a :href="'/user?username=' + item.author.loginname"><img class="avatar" :src="item.author.avatar_url"></a>
                </p>

            </li>
        </ul>
    </div>
    <script>
        var BASE_URL = 'https://cnodejs.org/api/v1'
        var vm = new Vue({
            el:'#app',
            created(){
                var _this = this;
                axios.get(BASE_URL + '/topics',{
                    params:{
                        page:1,
                        tab:'all',
                        limit:10
                    }
                }).then(function(res){
                    _this.dataList = res.data.data;
                }).then(function(err){
                    console.log(err)
                })
            },
            data:{
                dataList:[]
            }
        })
    </script>
文章详情页
<div class="back">
        <a href="javascript:history.go(-1)">返回</a>
    </div>
    <div id="app">
        <div class="detail">
            <div class="title"><h4>{{detail.title}}</h4></div>
            <div class="detail-content" v-html="detail.content"></div>
        </div>
        <div class="discuss">
            <button class="write-discuss" @click="openModal">发表评论</button>
            <h5>评论列表</h5>
            <ul class="discuss-list" v-if="discuss.length">
                <li class="discuss-item" v-for="item in discuss">
                    <div class="userinfo">
                        <span class="user-info">{{item.name}}</span>
                        <p><img class="avatar" src="avatar.png"></p>
                    </div>
                    <p class="discuss-content">{{item.content}}</p>
                </li>
            </ul>
        </div>
        <!-- 自定义评论弹出框 -->
        <div class="discuss-modal" v-if="modalFalg">
            <div class="modal-title"><h4>发表评论</h4></div>
            <div class="model-content">
                <div class="form-group">
                    <label>用户名:</label>
                    <input type="text" name="userinfo" v-model="userinfo">
                </div>  
                <div class="form-group">
                    <label>评论内容:</label>
                    <textarea v-model="content"></textarea>
                </div>
            </div>
            <div class="modal-footer">
                <input type="button" @click="publicDiscuss" value="发布">
                <button @click="closeModal">关闭</button>
            </div>
        </div>
        <div class="mask" v-show="modalFalg"></div>
    </div>
    <script>
        var BASE_URL = 'https://cnodejs.org/api/v1/topic/'
        var vm = new Vue({
            el:'#app',
            created(){
                var id = getArticleId();
                var _this = this;
                axios.get(BASE_URL + id).then(function(res){
                    if(res.status === 200){
                        _this.detail = res.data.data;
                    }
                }).then(function(err){
                    console.log(err);
                })
            },
            data:{
                detail:{},
                discuss:[
                    {userinfo:'lzy',content:'这是一条简单的评论'}
                ],
                userinfo:'',
                content:'',
                modalFalg:false
            },
            methods:{
                publicDiscuss(){
                    var obj = {
                        userinfo:this.userinfo,
                        content:this.content
                    }
                    this.discuss.unshift(obj)
                    this.modalFalg = false
                },
                openModal(){
                    this.modalFalg = true
                },
                closeModal(){

                    this.modalFalg = false
                    console.log(this.modalFalg);
                }
            }
        })
        function getArticleId(){
            return window.location.search.split('=')[1];
        }

效果图

文章列表页

这里写图片描述

文章详情页

这里写图片描述

填写评论功能

这里写图片描述

总结

整体来说做的比较简单,对vue也有了进一步的了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值