小程序新闻列表渲染 及点击标题展示详情

博客参考:

https://blog.csdn.net/qq_36901488/article/details/82347802

 

details.wxml 代码:

<!--pages/details/details.wxml-->
<block wx:for="{{article}}" wx:key="index">
<view class="box">
<view>作者:{{item.author}}</view>
//绑定冒泡事件,点击标题获取详情 <view bindtap="onclick" data-id="{{item.id}}">标题:{{item.title}}</view> <view>内容:{{item.content}}</view> <view class="img"> <image src="/images/stamp.png"></image> {{33}} <image src="/images/help.png"></image> {{item.help}} </view> </view> </block>

渲染数据的效果图:

 

 

 details.wxss代码:

/* pages/details/details.wxss */


.box{
    display: flex;
    flex-direction: column;
    margin-left: 20px;
    padding-top: 5px;
}
.box view{
    padding-top: 15px;
}
.img >image{
    width: 50rpx;
    height: 50rpx;
}

 details.wxjs代码:

// pages/details/details.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
// 接受 this.setData 传过来的数据
        article:[]
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        // 请求数据
    wx.request({
        // 网址
    url: 'http://www.day.com/week2/article/index',
    method:'POST',
    // 结果
    success:(res)=>{
    var info=res.data.data.data
// 逻辑层刷新值视图层
    this.setData({
        article:info
    })

    }
    })



    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    },
    // 页面详情,点击标题进行触发
    onclick(evt){
        // 获取id
        var id=evt.target.dataset.id
        // 携带id至detailsOne页面
        wx.navigateTo({
          url: '/pages/detailsOne/detailsOne?id='+id,
        })
     
    }
})

php 后端请求数据

model代码:

<?php

namespace app\week2\model;

use think\Model;

class ArticleModel extends Model
{
    //
    protected $table = "article";

//    数据库列表展示
    public static function listData()
    {
        return self::paginate(5);
    }

//    数据标题详情
    public static function details($id)
    {
        return self::find($id);
    }


}

controller代码:

<?php

namespace app\week2\controller;

use app\api\model\ArticleModel;
use think\Controller;
use think\Request;

class Article extends Controller
{
    /**
     *
     *文章列表页
     * @return \think\Response
     */
    public function index()
    {
        //
        $data = \app\week2\model\ArticleModel::listData();
        return json(['code' => 200, 'message' => 'ok', 'data' => $data]);
    }

 
    /**
     * 显示详情页
     *
     * @param int $id
     * @return \think\Response
     */
    public function read()
    {
        //数据库提取数据
       $id=input('id');

//       根据id获取详情
       $detailsData=\app\week2\model\ArticleModel::details($id);
//       返回json格式
       return json(['code'=>200,'message'=>'ok','data'=>$detailsData]);
    }

   
}

点击标题实现详情操作,首先给页面点击事件,需要数据的id,方便数据查询

 

 

 

 

 js 中触发点击

 

 

 

detailsOne.js
// pages/detailsOne/detailsOne.js
  
   
Page({

    /**
     * 页面的初始数据
     */
    data: {
//接受this.setData传过来的数据,进行页面渲染
        detailsOne:[]
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        // 接受details 传过来的id
        // console.log(options.id);
        let id =options.id
        // ajax 根据id请求后端数据,后端根据id进行sql语句的查询
  wx.request({
        url: 'http://www.day.com/week2/article/read',
        data:{
            id:id
        },
        success:(res)=>{
    //    console.log(res.data.data);
    let info=res.data.data
// 逻辑层传至视图层(data),detalsOne 进行渲染
    this.setData({
        detailsOne:info
    })

      }
      })
    },
})
根据id传送至php控制器,由id进行查询,代码上头有,这里就进行截图啦

 

 

 

 接受到数据传至data{},前往detailsOne.wxml  进行渲染即可。。

detailsOne.wxml  
<!--pages/detailsOne/detailsOne.wxml-->
<text>pages/detailsOne/detailsOne.wxml</text>

<view class="box">
<view>作者:{{detailsOne.author}}</view>
<view bindtap="onclick" data-id="{{detailsOne.id}}">标题:{{detailsOne.title}}</view>
<view>内容:{{detailsOne.content}}</view>
<view class="img">


<image src="/images/stamp.png"></image> {{detailsOne.stamp}}

<image src="/images/help.png"></image> {{detailsOne.help}}

</view>


</view>

 

 

posted @ 2021-10-26 15:42  王越666  阅读(377)  评论(0编辑  收藏  举报