小程序模板网

首页 小程序模板网 开发文档 小程序开发教程正文

小程序实战入门 - 手机归属地查询

发布时间:2017-12-19 10:30 所属栏目: 小程序开发教程

手机归属地查询本文从一个简单的手机归属地查询实现入手,来帮助你入门小程序开发。源码基本功能如下:查询手机归属地根据历史记录查询手机位数校验界面预览初始化创建空白项目新建一个空白项目AppID 可选择无不选择 ...

 
 
 

手机归属地查询

本文从一个简单的手机归属地查询实现入手,来帮助你入门

小程序

开发。

 

 

源码

 

基本功能如下:

  • 查询手机归属地
  • 根据历史记录查询
  • 手机位数校验

界面预览

 

 

 

 

初始化

创建空白项目

新建一个空白项目

  • AppID 可选择无
  • 不选择中创建 quick start 项目,而是创建空白项目,加深对小程序结构的理解。

基本配置

首先,创建全局配置文件 app.json

/app.json
{
  "pages":[
    "pages/index/index"
  ]
}

在全局配置文件中,定义了一个页面。保存之后,将会自动生成 index 页面的基本目录。

pages
└── index
    ├── index.js    // 页面业务逻辑
    ├── index.json  // 页面配置
    ├── index.wxml  // 页面视图
    └── index.wxss  // 页面样式

现在,还缺少一个应用的入口文件,用来注册小程序

/app.js
App({
})

App() 方法用来注册一个小程序。到这一步,小程序初始化就完成了。

功能实现

页面配置

首先,我们来为页面添加顶部导航文字

/pages/index/index.json
{
  "navigationBarTitleText": "手机归属地查询"
}

查询模块

接下来是查询模块

/pages/index/index.wxml

<view>
  <text>请输入查询内容text>
  <input type="number" bindinput="bindPhoneInput" value="{{ phoneNumber }}"/>
  <button type="primary" bindtap="queryPhoneInfo" disabled="{{ disabled }}">查询button>
view>

说明

  • bindinput 用于绑定键盘输入事件 - 用户输入时,将会调用绑定bindPhoneInput 函数
  • bindtap 用于绑定点击事件 - 用户点击按钮后,将会调用绑定的 queryPhoneInfo 函数
  • 按钮是否可点击取决于 disabled 的值;

接下里是具体的功能实现,首先,我们把手机归属地查询的功能封装到全局业务文件 app.js 中,方便不同页面使用

/app.js
App({
  /**
   * 获取手机归属地信息
   */
  getPhoneInfo(phoneNum, callback) {
    wx.request({
      url:
      'https://www.iteblog.com/api/mobile.php?mobile=' + phoneNum,
      header: {
        'content-type': 'application/json'
      },
      success: function (res) {
        callback(res.data);
      }
    })
  }
})

说明

  • 使用小程序提供的 wx.request 发送请求;
  • 该函数接受两个参数,一个是手机号,另外一个则是自定义函数,用来处理查询的结果。

在页面里面实现刚才定义的两个事件

/pages/index/index.js
var app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    phoneNumber: null, // 查找的手机号
    phoneInfo: null, // 查询结果
    disabled: true  // 默认不可查询
  },

   /**
   * 键盘输入手机号事件处理
   */
  bindPhoneInput(event){
    this.setData({
      phoneNumber: event.detail.value,  // 绑定用户输入的手机号
      phoneInfo: null   //  清空过往查询结果
    })
    this.setDisabled();
  },

  /**
   * 验证手机是否为 11 位
   */
  setDisabled() {
    this.setData({
      disabled: (this.data.phoneNumber && this.data.phoneNumber.toString().length === 11) ? false : true
    })
  },

  /**
   * 用户点击查询处理
   */
  queryPhoneInfo() {
    app.getPhoneInfo(this.data.phoneNumber, data => this.setData({
      phoneInfo: data
    }));
  }
})

说明

  • data 用于管理该页面的数据;
  • this.setData() 方法用于设置 data 的属性,如果直接使用 this.data.phoneInfo 无法改变页面状态;
  • 在页面中调用 app 的方法,需要先使用 getApp 进行实例化,然后通过实例来访问方法;

查询结果显示

接下来在视图里面显示查询结果

/pages/index/index.wxml




<view>

  <view wx:if="{{ phoneInfo }}">
   <text>查询结果为:text>
   
   <text wx:if="{{phoneInfo.ret === 0}}">
   {{phoneInfo.operator}}{{phoneInfo.province}}{{phoneInfo.city}}
   text>
   
  <text wx:else> {{phoneInfo.msg}} text>
  view>
view>

说明 - 使用 wx:if 与 wx:else 可以方便的根据查询结果来切换视图

最近搜索功能实现

最后是最近功能记录的功能实现,首先是视图


<view>
  <text>最近搜索text>
  <view>
    <view wx:for="{{ historyList }}"  bindtap="selectHistory" data-number="{{item}}">
       {{item}}
    view>
  view>
view>

说明:

  • 遍历 historyList 数组
  • 用户点击某一记录时候,触发 selectHistory 事件
  • 将每条手机号保存到 data-number 中,selectHistory 就可以获取对应的手机号了

业务逻辑

// pages/index/index.js
var app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    phoneNumber: null, // 查找的手机号
    phoneInfo: null, // 查询结果
    historyList: [],  // 查询历史
    disabled: true

  },

  /**
   * 键盘输入手机号事件处理
   */
  bindPhoneInput(event){
    this.setData({
      phoneNumber: event.detail.value,  // 绑定用户输入的手机号
      phoneInfo: null   //  清空过往查询结果
    })
    this.setDisabled();
  },

  /**
   * 验证手机是否为 11 位
   */
  setDisabled() {
    this.setData({
      disabled: (this.data.phoneNumber && this.data.phoneNumber.toString().length === 11) ? false : true
    })
  },


  /**
   * 用户点击查询处理
   */
  queryPhoneInfo() {
    app.getPhoneInfo(this.data.phoneNumber, data => this.setData({
      phoneInfo: data
    }));
    this.addQueryHistory(this.data.phoneNumber); // 添加搜索记录
  },

  /**
   * 将搜索记录添加到缓存
   */
  addQueryHistory(phoneNumber) {
    var historyList = wx.getStorageSync('historyList') || [];
    if (historyList.indexOf(phoneNumber) === -1) {
      historyList.unshift(phoneNumber);
      wx.setStorageSync('historyList', historyList);
    }
    this.setData({
      historyList: historyList
    })
  },

  /**
   * 页面加载后,从缓存中读取最近搜索列表
   */
  onLoad: function () {
    this.setData({
      historyList: wx.getStorageSync('historyList') || []
    })
  },

  /**
   * 用户点击记录之后,将其添加到输入框中
   */
  selectHistory(event) {
    this.setData({
      phoneNumber: event.currentTarget.dataset.number,
      disabled: false
    })
  }

})

界面美化

最后,只需要美化下界面即可。

视图


<view class="querySection">
  <text class="help-text">请输入查询内容text>
  <input class="queryInput" type="number" bindinput="bindPhoneInput" value="{{ phoneNumber }}"/>
  <button class="queryBtn" type="primary" bindtap="queryPhoneInfo" disabled="{{ disabled }}">查询button>
view>


<view>
  <view wx:if="{{ phoneInfo }}">
  <text class="help-text">查询结果为:text>
   
   <text wx:if="{{phoneInfo.ret === 0}}">
   {{phoneInfo.operator}}{{phoneInfo.province}}{{phoneInfo.city}}
   text>
   
  <text wx:else> {{phoneInfo.msg}} text>
  view>
view>


<view>
  <text class="help-text">最近搜索text>
  <view class="items">
    <view class="item" wx:for="{{ historyList }}"  bindtap="selectHistory" data-number="{{item}}">
       {{item}}
    view>
  view>
view>

样式

/* pages/index/index.wxss */

page {
  background-color: #EFEFF4;
  font-family: -apple-system-font,Helvetica Neue,Helvetica,sans-serif;
}

.querySection {
  display: flex;
  flex-direction: column;
  margin-top: 35px;
}

.help-text {
  font-size:14pt;
  color:#888888;
  margin-left:15px;
}

.queryInput {
  width:100%;
  background-color: #FFFFFF;
  height: 75px;
  margin:10px auto;
}

.queryBtn {
  margin:15px;
}

.items {
  display: flex;
  flex-wrap: wrap;
}

.item {
  margin:20px;
  background-color: #D2D2D2;
  padding: 13px;
  color:#FFFFFF;
  border-radius:20px;
}

.queryRst {
  margin:20px;
}


易优小程序(企业版)+灵活api+前后代码开源 码云仓库: star fork
本文地址:https://www.eyoucms.com/wxmini/doc/course/18203.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
  • 1 微信小程序自定义组件 - 表格组件来啦
  • 2 微信小程序自定义navigationBar顶部导航栏,兼容适配所有机型(附完整案例)
  • 3 手机界面设计尺寸规范
  • 4 小程序-记牌器
  • 5 微信小程序app.json文件常用配置说明
  • 6 微信小程序获得session_key和openId(加解密、签名系列)
  • 7 微信小程序|实现界面滑动切换
  • 8 小程序登录的最优流程
  • 9 微信小程序尺寸单位rpx和样式使用详解
  • 10 微信小程序-scroll-view滚动到指定位置(类似锚点)
  • 1 微信小程序app.json文件常用配置说明
  • 2 微信小程序文字控制单行超过显示省略号
  • 3 微信小程序参数传递的几种方法
  • 4 微信小程序使用button按钮分享
  • 5 微信小程序的setData
  • 6 小程序分享,获取openid
  • 7 微信小程序-实现tab
  • 8 微信开发者工具新建和导入小程序
  • 9 微信小程序实现点击拍照长按录像功能
  • 10 微信小程序必知知识

产品

  • 商业授权
  • 开通会员
  • 易优代理
  • 推荐主机

服务

  • 更新日志
  • 用户案例
  • 加入Q群
  • 增值服务

帮助

  • 易优问答
  • 标签手册
  • 易优技巧
  • 功能字典

关于

  • 关于易优
  • 知识产权
  • 版权声明
  • 隐私协议

工作日 8:30-12:00 14:30-18:00
周六及部分节假日提供值班服务

联系我们
QQ在线咨询
  • 业务客服
  • 付费修改
  • 加入Q群
  • 微信客服

    工作日 8:30-12:00 14:30-18:30

聚圣源2012在线韩姓起名大全男孩为躲交警钻女子被窝css虚线样式双胞胎女孩起名济南金锣冷鲜肉加盟文体有哪些起的4个字名字pc破解游戏11笔画的字男孩起名宋词起名 女孩姓名仿瓷砖金属制品公司起名大全二字测公司起名的好与坏支票是什么孤独的人并不寂寞网游小说txt下载武侠枭雄天道方程式邓姓独特男孩起名se9494se给店铺起一个吸引人的名字文具商店取名起名大全subverse小孩起名字哪些软件给农业起名商标起什么名称起名字缺水缺火商标起什么名字吗小孩子儿起名字大全淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化