文章详情 (二) -内容渲染-阅读记忆-@scroll=remember($event) 记住阅读位置 & v-html渲染文章详情内容 & toString() 方法可把一个逻辑值转换为字符串

文章详情-内容渲染-@scroll=“remember($event)” 记住阅读位置 & v-html渲染文章详情内容 & toString() 方法可把一个逻辑值转换为字符串

src/api/article.js api代码

export const getArticlepetail=(articleId)=>{
return request('/app/v1_e/articles/'+articlerd,'get')

src/views/home/article.vue

 // @scroll="remember($event)" 记住阅读位置
<div class='container' @scroll="remember($event)" ref="container">
    <van-nav-bar fixed title="文章详情" left-arrow @click-left="$router.back()" />
    <div class="detail" v-if="article">
      <h3 class="title">{{article.title}}</h3>
      <div class="author">
        <van-image round width="1rem" height="1rem" fit="fill" :src="article.aut_photo" />
        <div class="text">
          <p class="name">{{article.aut_name}}</p>
            // 相对时间
          <p class="time">{{article.pubdate|relTime}}</p>
        </div>
        <van-button round size="small" type="info">
           {{article.is_followed?'已关注':'+ 关注'}}
        </van-button>
      </div>
        // v-html渲染文章详情内容
      <div class="content" v-html="article.content"></div>
      <div class="zan">
          // 组件页面切换
        <van-button round size="small" :class="{active:article.attitude===1}" plain icon="like-o">点赞</van-button>
        &nbsp;&nbsp;&nbsp;&nbsp;
        <van-button round size="small" :class="{active:article.attitude===0}" plain icon="delete">不喜欢</van-button>
      </div>
    </div>
  </div>

src/views/home/article.vue中script里

import { getArticleDetail } from '@/api/article'
export default {
   //声明是为了标志更好找
  name: 'home-article',
  data () {
    return {
      article: {},
        //记住阅读位置
      scrollTop: 0
    }
  },
    //只会执行一次,将来再次进入组件,激活组件activated
//  created () {
//    this.getArticleDetail()
//  },
  activated () {
    // 没有文章数据  阻止程序运行
    if (!this.article) return false
     //再次激活,滚动到之前的位置
    //如果再次阅读上一次阅读的文章,才去做约定位置滚动 
      // toString() 方法可把一个逻辑值转换为字符串,并返回结果
    //if (this.$route.params.id === this.article.art_id.toString()) {
     if(this.article.art_id && this.articleId===this.article.art_id.tostring()){
      // 浏览文章与上次一致  阅读的同一篇文章
      this.$refs['container'].scrollTop = this.scrollTop
    } else {
      // 浏览文章与上次不一致 
        //清除之前的文章信息
      this.article = {}
        // 滚动条清零  回到顶部
      this.scrollTop = 0
        //重新获取文章数据
      this.getArticleDetail()
    }
  },
  methods: {
      //记住阅读位置
    remember (e) {
      this.scrollTop = e.target.scrollTop
    },
      //获取文章详情
    async getArticleDetail () {
        //直接获取地址栏ID  文章详情组件已经被缓存的组件
      const data = await getArticleDetail(this.$route.params.id)
      this.article = data
    }
  }
}

//获取地址栏ID  计算属性
//  computed:{
//     articleId(){
//     return this.$route.params.id
//  },
//  methods:{
 //    async getArticlepetail(){
  //   const data=await getArticlepetail(this.articleId)
//  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值