美文网首页
2023-10-06放完假后理一下

2023-10-06放完假后理一下

作者: 逢笔生辉 | 来源:发表于2023-10-05 14:26 被阅读0次

功能描述如以下

在首页关于轮滑图的设置

http(url,that,arr){    // var that=this;    wx.request({      url:url,      success:(res)=>{        wx.showLoading({          title:"加载完毕",          duration:500        })        if (res.data.status==200 ) {          that.setData({[arr]:res.data.data})             console.log(res.data);                       // console.log(res.data,'89')                        }      else if ( typeof res.data.status === 'undefined'){        that.setData({[arr]:res.data[0]})          console.log(res.data)        wx.setNavigationBarTitle({          title:res.data[0].title            })      }

我们如果要请求数据的话一般都会到js中写wx.request代码。可如果我们发现有几个请求的内容代码格式都差不多的话。我们就可以在app.js中写一个公共代码,供全局使用。在app.js中,同样有的全局变量 App<IAppOption>({  globalData: {    cityname:""  },。能搞供给各个页面之间传递参数。所以在轮播图中的数据请求我们就封装到了http这个函数之中

  onLoad() {

    // 获取app.js封装的网络请求发现报错WAServiceMainContext.js?t=wechat&s=1695694252907&v=3.1.1:1 TypeError: Cannot read property 'setData' of undefined

    // app.http(host+bannerurl,"bannerArr")

    app.http(host+bannerurl,this,'bannerArr');

    app.http(host+indexUrl,this,'listArr');

    // this.http(host+indexUrl,"listArr")

关于 用http     传递参数我们也需要注意 一点的是关于this这个页面的全局。在用this.setdata时,所以我们在app.js中定义的 http(url,that,arr)这里的that就是this .而在js页面中传入的参数为this赋值给了that..要在页面中使用app.js应该如此定义 const app = getApp()

还有若要在配一些公共属性如下图。也可在util中配置,使用方法 const {host,bannerurl,indexUrl}=require('../../utils/commn/config.js')

关于跳转的话  goodtail(e){    console.log(e)    wx.navigateTo(      {url:"../iindexdetail/indexdetail?id="+e.currentTarget.dataset.id}    )  },

可以在wxml中直接使用naviga跳转。也能用点击事件进行跳转。,而这里使用了点击事件跳转。并设置了data-id传递参数给事件用e来实现。后面发起请求把id传到另外一个页面。如图。通过onload的opinion获取

 <view class="list" wx:for="{{listArr}}" wx:key="index" bind:tap="goodtail" data-id="{{item.id}}">

然后下面要注意的就是css的样式问题。关于flex布局,关于位置,关于绝对定位相对定位。关于外距离和内距离。在不清楚时用border把边框标出来。然后还有一个问题是图片不能够撑满整个容器,那么请设置 image{  width: 100%;  height: 125%;}

关于文字对齐请用align .还有文字溢出

关于轮播图还有的就是下面的3/5的设置

  // 轮播触发--------------js

  swiperchange(e){

    this.setData({

      currrentIdex:e.detail.current

    })}

html

  <swiper class="banner"  indicator-color="black" indicator-active-color="white" circular="true"  bindchange="swiperchange" autoplay >

这里有个bindchange的函数来监控轮播图发生更改时候的事件参数id

 <view class="biaodi">{{currrentIdex+1}}/{{bannerArr.length}}</view>

下面是进入了详细页面。先是使用到showtoastonLoad(opnion) {

// 网络请求的接口id和数据

    console.log(opnion.id) 

     wx.showLoading(

      {title:"数据拼命加载中",

      duration:500

      }

    )   

来为我们展示数据正在加载中。而当用wx.request请求完数据再用complete来最后加载数据

然后使用app.htt请求数据app.http(host+indexDetail+"id="+opnion.id,this,'info');

我们还要实现的是在导航栏实现一个加载动画 wx.showNavigationBarLoading();。就是这一部分

而且还要实现更改导航栏文字的功能 。我们已经在app.js的函数中使用了这个功能

  wx.setNavigationBarTitle({

          title:res.data[0].title

下面来到食物馆这个页面

同理我们先把这个导航栏的页面更改一下    wx.setNavigationBarTitle({

      title:"食疗馆"

后面的css布局

.fenlei{

  // border: 1rpx red solid;

  display: flex;

 flex-wrap: wrap;

  padding: 10rpx;

  justify-content: space-around;

position: absolute;

top: 9%;

flex-direction: row;

// margin: auto;

}

.fenlei-item image{

  width:50rpx;

  height: 50rpx;

}

.fenlei-item {

  // border: 1rpx red solid;

  width:70rpx;

  height:70rpx;

  margin-left:50rpx;

  margin-right: 50rpx;

  font-size: 9rpx;

  margin-top: 20rpx;

  font-size: 20rpx;

  text-align: center;

请注意flex-wrap 是一个CSS属性,用于确定当flex项目超出其容器的宽度时,它们是否应该换行。它与容器元素上的 display: flex 或 display: inline-flex 属性一起使用。flex-wrap 属性接受三个值:1. nowrap:这是默认值。它表示flex项目不会换行,即使它们溢出容器,也会在单行中显示。2. wrap:这个值允许flex项目在需要时换行到多行。换行发生在第一行填满后,后续项目会放置在新的行上。3. wrap-reverse:这个值与 wrap 类似,但它以相反的顺序换行。换行从容器的底部或右侧开始,并向上或向左移动。

在这里我们还实现了对模板的使用。因为对于有的html样式和css样式都是一样的,可以重复使用。那么这个时

候我们直接建造一个文件夹来存储我们的模板。

css引入的写法为 @import '../templates/foolist/foodlist.wxss';

在html中为 </view><view></view><import src="../templates/foolist/foodlist.wxml"/><block wx:for="{{listArr}}" wx:key="index">    <template is="foodlist" data="{{...item}}"/></block><view class="more">{{moreinfo}}</view>

请注意这里的问题...item为展开列表。如果不需展开请直接用item.而在模板文件中

<template name="foodlist1">

  <view class="shop-info">

  <view class="shop-image">

  <image src="{{item.pic}}" mode=""/>

    </view>

  <view class="shop-text">

    <view class="title">{{item.name}}</view>

    <view class="detail">{{item.description}}</view>

    <view class="other">

      <view class="money">${{item.price}}</view>

      <view class="num">{{item.buynum}}人付款</view>

    </view>

  </view>

</view>

</template>

通过template的名字的不同可以定义多个模板{{item.buynum}},{{item.name}}必须为item中拥有的键才能识别到

我们在这里还实现了下拉刷新的功能。在使用之前需要到app.json中的window中开启   "window": {    "backgroundTextStyle": "light",    "navigationBarBackgroundColor": "#518890",    "navigationBarTitleText": "食疗坊",    "navigationBarTextStyle": "black",    "enablePullDownRefresh": true  },enable为true

对于这一部分

图片

并不是请求得来。而同样是在utli.js中配置。

众所都知,我们在html中不能够使用js代码,但能够使用wxss

这个使用为<wxs src="../../utils/str.wxs" module="tools" />

再让我们回到下拉刷新。可在监控函数中定义  onPullDownRefresh() {

    console.log("下拉刷新数据");

    // 下拉更新数据  功能1.下拉重新请求接口2请求上海的数据

    wx.request({

      url: host+foodlist,

      data:{

        city:"上海",

        page:1

      },

      success:(res)=>{

        this.setData({

          listArr:res.data.data.result,

          num:1

        })

        console.log(res.data,"更多数据");

      }

    })

  }, * 页面相关事件处理函数--监听用户下拉动作下拉刷新,要到页面的json中设置background颜色

{

  "usingComponents": {},

  "backgroundColor": "#ff7695",

  "onReachBottomDistance":20

}

onReachBottomDistance为触底事件

  onReachBottom() {

    this.data.num++;

    console.log("加载更多数据",this.data.num)

    // 请求数据的接口

    wx.request({

      url: host+foodlist,

      data:{

        city:this.data.location,

        page:this.data.num

      },

      success:(res)=>{

        if (res.status==200) {

          console.log(res.data)

              this.setData({

          listArr:this.data.listArr.concat(res.data.data.result)})

          // 如何把data里面数组的数据和新请求的数组数据合并

        } else {

          console.log("没有更多数据了")

          this.setData({

            moreinfo:"我是有底线的"

          })

        }

        //

        console.log(res);

      }

然后我们实现搜索框的请求功能。我们使用      <navigator url="../diinwei/diinwei">{{location}}</navigator>

    </view>

    <navigator class="search" url="../search/search?cityname={{location}}"> 请输入你想要的内容

    <!-- <input type="text" placeholder="请搜索你喜欢的" bindinput="search"/> 这里能够使用两种方式-->

    </navigator>

  </view>

来跳转到另一个页面

找到搜索的接口,把返回的数据套子在模板上

搜索功能由input绑定事件实现<view class="header">

<!-- 用户输入内容,搜索内容,显示数据,事件 input组件 bindinput -->

  <input type="text" focus="true" placeholder="请输入你喜欢的内容" bindinput="getinputVal"/>

</view>

然后再到js中定义函数

getinputVal(e){

  console.log(e.detail);

if (e.detail.value) {

  wx.request({

    url:host+searchurl,

    data:{

      city:this.data.cityName,

      name:e.detail.value

    },

    success:(res)=>{

      console.log(res.data);

      console.log(res.data.data,"dsfwsedf")

      if (res.data.status==200) {

        this.setData({

          liistArr:res.data.data

        })

      }

    }

  })

}

else

{

  console.log('输入内容不能为空');

  //清空数据

  this.setData({

    list:[]

  })

}},

实现接口数据请求返回

请注意在这块的bug就是this.setdata的异步返回不会返回数据,只有object返回

还有要获取定位权限的。请在app.json中的window中添加以下代码  "requiredPrivateInfos": ["getLocation", "chooseLocation", "chooseAddress"],

  "permission": {

    "scope.userLocation": {

      "desc": "你的位置信息将用于小程序位置接口的效果展示" 

    }},

而后用按钮绑定函数getLocation(){

    wx.getLocation({

      success: function(res) {

        console.log(host+locaation);//longitude   latitude

        //http://iwenwiki.com:3002/api/lbs/location?latitude=39.90&longitude=116.4

        wx.request({

          url: 'http://iwenwiki.com:3002/api/lbs/location',

          data:{

            latitude: res.latitude,

            longitude: res.longitude

          },

          success:result=>{

            console.log(result);

            var citys = result.data.result.ad_info.city;

            var cityName = citys.slice(0, citys.length-1);

            console.log(cityName);

            // wx.reLaunch({  给全局变量

            console.log(app);

            app.globalData.cityname=cityName;    

                wx.switchTab({

url:"../foodcare/foodcare"})

在这里的跳转方法有几种,请注意

1 wx.switchTab(

2wx.relunch

3wx.navigator

对于更改页面的cityname.返回的数据要将其cityName赋值给全局变量。或用navigator携带参数,或用本地存储 wx.setStorageSync('cityName', citys);

这里有个bug,无法点击后返回

得重新刷新。不过可以在外部定义个全局变量

然后再在点击定位和热门城市的时候分别改变

再到这里使用if的判断语句

   if (app.globalData.cityname &&app.globalData.num==1) {

      this.setData({

        location:app.globalData.cityname

      }),

        wx.request({

      url: 'http://iwenwiki.com:3002/api/foods/list',

      data:{

        city:this.data.location,

        page: 1

相关文章

  • 快放完假

    明天公司值班,一晃神春节小长假就这么结束。最近在家,弄了之前眼馋好久的川菜酥肉、粉蒸肉。其实绝大步骤都是简单的,第...

  • 我变成猫以后

    我看完博主Ale鎏白的小熊猫日常后,非常不信邪的尝试了一下。然后,变成了一只超肥的橘猫。想到国庆假已经放完,我就是...

  • 放完高温假公司“没了”

    200多名怀揣模特梦的女孩子上当,案值20万元 7月27日,市民小雪(化名)反映,当她放完高温假返回公司却发现,公...

  • 端午假期结束

    三天小短假一下子就结束了。 每次放完假都是依依不舍的,依依不舍在家像个大爷一样,回家只需要葛优躺就可以...

  • 上班了

    放完假了,又该上班了 今天是上班的第一天 整体比较清闲 领导关心一下 科室汇报一下 周围再检查一下 开工了 又是元...

  • 放完假反而更累,怎么回事?

    柠檬心理丨作者 柠檬心理&QQ音乐丨音频 Pexels、Pixabay、网络丨图源 你有没有过这样的体验: 好不容...

  • 近期计划(12月5日-过年前)

    工作规划 除非工资状况有很大改善,否则初步打算放完假跑路。这段时间主要任务: 工作上的事随便对付一下,你不仁我不义...

  • 明天周一

    在这个世界上 再也没有 比刚刚放完假的人 更需要放假的了 ​​​ ​​​

  • 第三周

    本周上了六天的课,然后就是愉快的中秋时节,放了三天的假期,放完假后,就要电工实训了,还是一样,只要实习上午半...

  • 五一假期后的第一天上班

    每次放完假后,内心都很拒绝去上班,很怕和别人接触相处交流,只想把自己封闭起来。 这种浑浑噩噩的日子,我还要到什么时...

网友评论

      本文标题:2023-10-06放完假后理一下

      本文链接:https://www.haomeiwen.com/subject/cneubdtx.html