[小程序项目] 使用微信开发者工具 新闻小项目 轮播图 新闻列表页 点击跳转新闻详情页 登录 获取用户基本信息

效果

在这里插入图片描述
ps画布750,量2px,css写2rpx

Gitee

gitee仓库地址

目录结构

在这里插入图片描述

app.json

{
  "pages":[
    "pages/news/news",
    "pages/mine/mine",
    "pages/detail/detail"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "新闻网",
    "navigationBarTextStyle":"black",
    "onReachBottomDistance": 50
  },
  "tabBar": {
    "color":"#000",
    "selectedColor": "#ff0000",
    "list": [
      {
        "pagePath": "pages/news/news",
        "text": "新闻",
        "iconPath":"static/img/fen1.png",
        "selectedIconPath": "static/img/fen2.png"
      },
      
      {
        "pagePath": "pages/mine/mine",
        "text": "我的",
        "iconPath":"static/img/mine1.png",
        "selectedIconPath": "static/img/mine2.png"
      }
    ]
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

首页

在这里插入图片描述

pages/news/news.wxml

在这里插入图片描述

<!--pages/news/news.wxml-->
<view class="news-box">
    <view class="header">
        <!-- 搜索框 -->
        <view class="search-box">
            <icon type="search"></icon>
            <input type="text" placeholder="搜索" bindconfirm="bindKeyconfirm"></input>
        </view>
    </view>

    <!-- 轮播图 -->
    <swiper indicator-dots="true" autoplay="true" interval="1000" duration="500" class="swiper-box">
        <!-- newsHotdata存放轮播图数据 -->
        <block wx:for="{{newsHotdata}}" wx:key="index">
            <!-- 绑定点击事件,,跳转到每一条新闻的详情页,使用data-把单项新闻的id传过去 -->
            <swiper-item bindtap="tapHandler" data-id="{{item.id}}">
                <image src='{{item.pic}}' mode=" widthFix"></image>
                <view class="txt">{{item.title}}</view>
            </swiper-item>
        </block>
    </swiper>

    <!-- 新闻列表 -->
    <!-- newsdataList存放新闻列表数据,绑定点击事件,跳转到每一条新闻的详情页,使用data-把单项新闻的id传过去 -->
    <view class="news-area" wx:for="{{newsdataList}}" wx:key="index" bindtap="tapHandler" data-id="{{item.id}}">
            <!-- 图片区域 -->
            <view class="pic-area">
                <image src="{{item.pic}}"></image>
            </view>
            <!-- 文字区域 -->
            <view class="content-area">
                <view class="title">{{item.title}}</view>
                <view class="desc">{{item.desn}}</view>
                <view class="bot">{{item.author}}</view>
            </view>
    </view>

    <!-- 没有数据时,显示 -->
    <view class="nomore" wx:if="page>last_page">
        没有更多数据了
    </view>
</view>

pages/news/news.wxss

在这里插入图片描述

pages/news/news.js

在这里插入图片描述

// pages/news/news.js
import {GetnewsHot,GetnewsList,GetnewsSearch} from '../..//utils/http'

Page({

    /**
     * 页面的初始数据
     */
    data: {
        newsHotdata: [],  //热点新闻列表
        newsdataList:[],  // 新闻列表
        page:1,   // 页码数
        last_page:2  // 最后一页的页码数
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        // 获取热点新闻的接口
        GetnewsHot(null).then((res) => {
            console.log('热点新闻', res);
            this.setData({
                newsHotdata: res.data,
            })
        });
         // 获取新闻列表
        this.getNewsList()
    },

    // 获取新闻列表
    getNewsList:function(){
        GetnewsList({page:this.data.page}).then((res)=>{
            console.log('新闻列表',res);
            let new_data = res.data.data
            this.setData({
                newsdataList: this.data.newsdataList.concat(new_data),
                last_page:res.data.last_page
            })
        })
    },

    // 回车搜索
    bindKeyconfirm: function (e) {
        // 搜索新闻的接口
        GetnewsSearch({keyword:e.detail.value}).then(res => {
            console.log('搜索新闻',res);
            this.setData({
                newsdataList: res.data.data,
            })
        })
    },

    // 跳转到详情页
    tapHandler(event){
        // 获取新闻id
        console.log(888,event);
        
        // 跳转到详情页,携带参数过去
        wx.navigateTo({
            url:"/pages/detail/detail?id="+event.currentTarget.dataset.id
         })
    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {
        console.log('触底啦');
        this.setData({
            page:this.data.page+1
          })
        // 加载下一页数据
        if(this.data.page<=this.data.last_page){
            console.log('this.data.page',this.data.page);
            this.getNewsList()
        }
    },


    

配置网络请求

utils/http.js

// 管理所有的请求
import ajax from './request'

let base_url = 'https://mpapi.iynn.cn/api/v1/'

// 首页热点新闻接口
export function GetnewsHot(data){
  return ajax(base_url+'news/hot','get',data)
}

// 首页新闻列表接口
export function GetnewsList(data){
  return ajax(base_url+'news','get',data)
}

// 首页新闻搜索接口
export function GetnewsSearch(data){
  return ajax(base_url+'news/search','get',data)
}

// 首页新闻详情接口
export function GetnewsDetail(data){
  return ajax(base_url+'news/'+data.id,'get')
}

// 登录接口
export function GetLogin(data){
  return ajax(base_url+'login','post',data)
}

utils/request.js

// 封装请求
  const  ajax = (url,method,data)=>{
  // 显示loading 
   wx.showLoading({
     title: '加载中',
   })

   return new Promise((resolve,reject)=>{
     wx.request({
       url: url, 
       data:data,
       method:method,
       header: {
         'content-type': 'application/json' // 默认值
       },
       success (res) {
         // console.log(res.data)
         resolve(res.data)
         // 隐藏loading
         wx.hideLoading()
       },
       fail(err){
         reject(err)
       }
     })
   })
}

export default ajax

utils/request_login.js

获取code,登录用的

const wxLogin = () => {
  return new Promise((reslove,reject) => {
    wx.login({
      success(res) {
        if (res.code) {
          reslove(res.code)
        }
        else {
          reject({ message: "登录失败" })
        }
      },
      fail(err) {
        reject(err)
      }
    })
  })
}

export default wxLogin

utils/request_userinfo.js

获取用户基本信息:昵称,头像。。

const wxUserProfile = () => {
  return new Promise((reslove,reject) => {
    wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res);
        reslove(res.userInfo)
        
      }
    })
  })
}

export default wxUserProfile

详情页

在这里插入图片描述

pages/detail/detail.wxml

<!--pages/detail/detail.wxml-->
<view class="detail-box">
    <view class="title">
        {{newsdata.title}}
    </view>
    <view class="author">
        {{newsdata.author}}
    </view>
    <view class="info">
        <view class="info-innner">访问:{{newsdata.click}} | </view>
        <view class="info-innner">收藏:{{newsdata.fav}} | </view>
        <view class="info-innner">点赞:{{newsdata.like}}</view>
    </view>
    <view class="content">
        <view class="content-inner">{{newsdata.desn}}</view>
    </view>
    <view class="pic">
        <image src="{{newsdata.pic}}"></image>
    </view>
</view>

pages/detail/detail.js

// pages/detail/detail.js
import {GetnewsDetail} from '../../utils/http'
Page({

    data: {
        newsdata:{},  // 详情页数据
    },

    onLoad: function (options) {
        // 使用options获取导航携带的参数
        console.log('options',options);  //{id: "30"}

        // 获取详情页的接口
        GetnewsDetail({id:options.id}).then(res=>{
            console.log(888,res);
            this.setData({
                newsdata:res.data
            })
        })
    },

注意点:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我的页

在这里插入图片描述

openid

是用户身份的标识符,为了方便开发者识别用户的。其是一个字符串,包含了数字和字母。

openid有一个特征,同一个用户在使用很多个应用的时候,每个应用获取到这个用户的openid值是不一样的。例如,张三在使用App1,App1程序获取到其openid可能是123456789,App2获取到张三的openid可能是234567890。

想要获取openid,需要code(调用wx.login的api获得code),appid、appsecret。. 将code与appid及appsecret(后端)三个参数一起去腾讯换openid【由后端去换】

【后端要做】在换取到openid之后,去数据库中判断该openid是否存在(判断当前这个用户是新用户还是老用户),如果在则直接登录,如果不在后端会往数据库中建立一个用户账号。最终返回给前端openid及用户在项目中标识符(一般是用户名或用户id号)

pages/mine/mine.wxml

<!--pages/mine/mine.wxml-->
<view class="mine-box">
    <view class="userinfo" >
        {{userInfo.nickName}}
    </view>
    <view class="login-info" bindtap="loginHandler">登录/注册</view>
</view>

pages/mine/mine.js

在这里插入图片描述

// pages/mine/mine.js
import {GetLogin} from '../../utils/http'
import wxLogin from '../../utils/request_login'
import wxUserProfile from '../../utils/request_userinfo'
Page({

    /**
     * 页面的初始数据
     */
    data: {
        code: '',  //code,请求wx.login获取到,用来获取openid的,
        appid: '。。',
        appsecret: '。。',
        id: '',
        openid: '',  //openid,登录用的
        userInfo:'', // 用户基本信息
        hasUserInfo: true
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        // 获取code
        this.getUserCode()

    },
    // 获取code
    async getUserCode() {
        const code = await wxLogin();
        this.setData({
            code: code
        })
    },
    // 获取用户信息
    async getUserInfo() {
        const userInfo = await wxUserProfile();
        this.setData({
            userInfo: userInfo,
            hasUserInfo: true
        });
        // 存储到缓存中
        wx.setStorageSync('userInfo', this.data.userInfo)
    },

    // 获取openid
    getOpenId() {
        GetLogin({
            code: this.data.code,
            appid: this.data.appid,
            appsecret: this.data.appsecret
        }).then(res => {
            console.log(11, res);
            this.setData({
                id: res.id,
                openid: res.data.openid
            })
            console.log(6666, this.data.openid);
            // 存储到缓存中
            wx.setStorageSync('openid', this.data.openid)
        })
    },
    // 登录
    loginHandler() {
        // 获取缓存数据
        let openid = wx.getStorageSync('openid');
        if (!openid) {
            // 获取openid
            this.getOpenId()
        };
        // 获取用户信息
        let user_info = wx.getStorageSync('user_info');
        if (!user_info) {
            // 获取用户信息
            this.getUserInfo();
        }
    },

分析
在这里插入图片描述

  • 6
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
微信开发者工具小程序注册和项目创建方法如下: 1. 注册微信开发者账号 首先,你需要拥有一个微信账号,然后在微信开放平台注册成为开发者,通过审核后就可以获得 AppID 和开发者工具等开发资源。 2. 下载并安装微信开发者工具 在微信公众平台开发者工具面,你可以下载对应操作系统的微信开发者工具。下载完成后,进行安装。 3. 使用微信开发者工具注册小程序 打开微信开发者工具使用微信开发者账号登录。在菜单栏中选择“注册小程序”,填写小程序的相关信息,包括小程序名称、AppID、类型等。 4. 创建小程序项目 注册小程序成功后,你可以在微信开发者工具中创建小程序项目。在“项目”中选择“新建项目”,填写小程序的相关信息,包括小程序名称、AppID、项目目录等。然后点击“确定”即可创建小程序项目。 5. 编辑和调试小程序 在创建小程序项目后,你可以在微信开发者工具中编辑和调试小程序。在左侧的项目结构树中,你可以看到小程序的各个文件夹和文件,包括小程序面、组件、逻辑层代码等。右侧则是预览小程序的窗口,你可以在该窗口中实时查看小程序的运行效果。 6. 发布小程序小程序开发完成后,你可以在微信开发者工具中进行打包和上传小程序代码的操作。在上传成功后,你需要在微信公众平台中进行小程序的提交审核,审核通过后即可正式发布小程序。 希望这些步骤可以帮助你注册并使用微信开发者工具,并创建小程序项目。如果你在使用过程中遇到了问题,可以在微信开发者社区中寻求帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值