小程序开发有哪些坑

 我来答
姣过手飘找人1Q
2018-05-30 · TA获得超过1904个赞
知道大有可为答主
回答量:2466
采纳率:70%
帮助的人:363万
展开全部

1. JSON 配置文件小程序中,包含唯一的全局配置文件 app.json,以及每个页面的配置文件 page.json。每单页页面相应的 JSON 文件会覆盖与 app.json 相同的配置项。如下,是一个包含了所有配置选项的简单配置 app.json。"pages": [ //设置页面的路径"pages/index/index", //不需要写index.wxml,index.js,index,wxss,框架会自动寻找并整合"pages/logs/logs"],"window": { //设置默认窗口的表现形式

"navigationBarBackgroundColor": "#ffffff", //顶部导航栏背景色
"navigationBarTextStyle": "black", //顶部导航文字的颜色 black/white
"navigationBarTitleText": "微信接口功能演示", //顶部导航的显示文字
"backgroundColor": "#eeeeee", //窗口的背景色
"backgroundTextStyle": "light", //下拉背景字体、loading 图的样式,仅支持 dark/light
"enablePullDownRefresh": "false", //是否支持下拉刷新 ,不支持的话就直接不写!
"disableScroll": true, //  设置true不能上下滚动,true/false,注意!只能在 page.json 中有效,无法在 app.json 中设置该项。},"tabBar": { //底部tab或者顶部tab的表现,是个数组,最少配置2个,最多5个
"list": [{ //设置tab的属性,最少2个,最多5个
"pagePath": "pages/index/index", //点击底部 tab 跳转的路径
"text": "首页", //tab 按钮上的文字
"iconPath": "../img/a.png", //tab图片的路径
"selectedIconPath": "../img/a.png" //tab 在当前页,也就是选中状态的路径
}, {    "pagePath": "pages/logs/logs",    "text": "日志"
}],  "color": "red", //tab 的字体颜色
"selectedColor": "#673ab7", //当前页 tab 的颜色,也就是选中页的
"backgroundColor": "#2196f3", //tab 的背景色
"borderStyle": "white", //边框的颜色 black/white
"position": "bottom" //tab处于窗口的位置 top/bottom
},"networkTimeout": { //默认都是 60000 秒一分钟
"request": 10000, //请求网络超时时间 10000 秒
"downloadFile": 10000, //链接服务器超时时间 10000 秒
"uploadFile": "10000", //上传图片 10000 秒
"downloadFile": "10000" //下载图片超时时间 10000 秒
},"debug": true //项目上线后,建议关闭此项,或者不写此项

2. JS 逻辑层

小程序的逻辑层由 JavaScript 语言完成。但因为小程序不在浏览器中运行,所以 JS 在 web 浏览器中的一些函数不能用,如 document、window 等。

app.js 有全局的小程序生命周期,page.js 有自己本页面的生命周期。

2.1 注册小程序 app.js

这一步骤,有这几个需要注意的地方:

  • 必须在 app.js 中,使用 app() 函数注册微信小程序。全局小程序中,只能注册一次;

  • 不能在 app() 内的函数中调用 getApp()(小程序实例),使用 this 就可以拿到小程序的实例;

  • 不要在 onLaunch 的时候 getCurrentPage(),因为此时 page 还没有生成;

  • 通过其他子页面调用 getApp() 获取实例后,不要私自调用小程序全局的生命周期方法;

  • 可以通过 var app=getApp() 获取小程序的实例。

  • app ( {  // 小程序生命周期的各个阶段

  •  onLaunch: function(){},//当小程序初始化完成时,会触发 onLaunch(全局只触发一次)

  •  onShow: function(){},//当小程序启动,或从后台进入前台显示,会触发 onShow

  •  onHide: function(){},//当小程序从前台进入后台隐藏,会触发 onHide

  •  onError: function(){},//当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息

  •  // 自定义函数或者属性,用 this可以访问

  •  ...

  • })

  • 2.2 注册小程序的页面 page.js

    Page() 用来注册一个页面,维护该页面的生命周期以及数据。

  • Page({  data: { //页面的初始数据//调用:{{text}} {{array[0].msg}}

  •    text: 'init data',    array: [{      msg: '1'

  •    }, {      msg: '2'

  •    }]

  •  },  // 页面生命周期的各个阶段

  •  onLoad: function () {}, //生命周期函数--监听页面加载

  •  onShow: function () {}, //生命周期函数--监听页面初次渲染完成

  •  onReady: function () {}, //生命周期函数--监听页面显示

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

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

  •  onPullDownRefresh: function () {}, //页面相关事件处理函数。如果需要监听用户下拉动作,需要 在app.json中配置  "enablePullDownRefresh":"true" 允许上拉刷新

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

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

  •    return {      title: '自定义分享标题',      desc: '自定义分享描述',      path: '/page/user?id=123'

  •    }

  •  },  // 自定义函数或者属性如:

  •  customData: {    hi: 'MINA'

  •  }...

  • })

  • 2.3 公共模块 util.js

    公共模块方法需要通过 module.exports 对外暴露接口,使用的时候需要利用 require(path),将文件引入。如:

  • function sayHello(name) {//公共方法util类

  •  console.log(`Hello ${name} !`)

  • }module.exports.sayHello = sayHello//用module.exports 对外暴露接口

  • //先引入文件,是新建的一个 utils 包,公共方法在 util.js 里面var util = require('../../utils/util.js')

  • Page({//调用类

  •  onLoad: function () {//  使用时,用 util 引用名调用,如:util.sayHello()

  •    util.sayHello('我是传的值');

  •  }

  • })

  • 2.4 数据操作

    setData() 不能直接操作数据,例如 this.data.text="xxxxx" 就是错误的。你需要在 this.setData () 之中,进行数据的操作。

    同时,这里有作用域的问题。比如,需要在局部函数中使用,就需要 .bind(this)。

    如果你需要操作全局的数据,你需要在 app.js 中进行相应设置,例如:

  • App({// app.js

  •  globalData: 1})// 某 page.jsconsole.log(getApp().globalData)

  • 3. 视图层 WXML

    视图层的数据绑定均来自于 Page 中的 data,想要修改相应值,你需要用到 this.setData。数据绑定使用两对花括号,将变量名包起来。

    3.1 条件渲染

    你可以利用 if 和 else,在视图层上编写在特定情况下,出现的不同的视图结果。

  • <view wx:if="{{zhenjiaa=='123'}}">123334</view><view wx:if="{{zhanjia}}">123334</view><view wx:if="{{len > 5}}">大于5我就显示了 </view><view wx:if="{{length > 5}}"> 1 </view><view wx:elif="{{length > 2}}"> 2 </view><view wx:else> 3 </view><block wx:if="{{true}}"><view> view1 </view><view> view2 </view></block>

  • 很多人会将 CSS 中的 display: hidden 属性,将其做一个比较。

  • 微信小程序中的 wx:if 是惰性的。如果不符合渲染条件,它不会渲染相应部分;

  • 使用 display: hidden 时,元素始终渲染,只是视图层上没有显示,用户看不见。

  • 如果你的小程序有元素显示频繁切换的需求,建议你使用 display: hidden,能够为用户提供能顺畅的使用体验。

    3.2 列表渲染

    相当于让 WXML 处理一个循环。

    在 WXML 中,你可以这样来建立一个 for 循环:

    <view wx:for="{{array}}"> {{index}}:{{item}} </view>

    然后在相应的 JS 中,新建一个数组:

  • page.jsPage({  data: {

  •    array: [1, 2, 3, 4, 5]

  •  }

  • })

  • 需要注意的是,如果列表中的项需要动态添加到列表中,并希望项目保持原有的特征和状态,那么你应该使用 wx:key。

    wx:key 有两种形式:

  • 字符串:wx:key="unique"

  • 保留关键字:wx:key="*this"

  • 3.3 运算

    WXML 可以执行简单的运算任务。例如:

    <view> {{a + b}} + {{c}} + d </view>

    也可以做到字符串拼接:

    <view>{{"hello" + name}}</view>

    甚至,你可以使用 ... 在 WXML 中展开对象。

    3.4 模板

    name 定义组件模版的名称,引用模版的时候使用 is 属性指定模版的名字,is 可以进行简单的三目运算,需要传入模版需要的 data 数据。

    因为模版拥有自己的作用域,所以只能使用 data 传入数据,而不接受双花括号的写法。

  • <template name="msgItem"><view><text> {{index}}: {{msg}} </text><text> Time: {{time}} </text></view></template><!-- 其他代码 --><template is="msgItem" data="{{...item}}"/>

  • 3.5 公共模块的引用

    WXML 提供 import 和 include 两种文件引用方式。

    import 有作用域的概念,不能多重引用。

  • <!-- B.wxml --><import src="a.wxml"/><!-- A.wxml --><template name="A">

  • <text> A template </text></template>

  • 而 include 就可以多重引用了。

  • <!--引用 header、其中 header.wxml 中也引用了 footer.wxml--><include src="header.wxml"/><view> body </view><!-- header.wxml --><view> header </view><include src="footer.wxml"/>

  • 3.6 事件

    名称以 bind 开头的事件不阻止冒泡,名称以 catch 开头的事件冒泡是阻止的。如 bindTap 和 catchTab。

    在 WXML 中,可以使用 dataset 定义 data 中的数据,会通过事件传递。它的事件以 data- 开头,多个单词以 - 链接,如 data-a-b。

    需要注意的是,使用这种方式定义的变量不能有大写。它会自动转成驼峰命名,调取的时候去驼峰命名的名字。

    4. WXSS

    WXSS 的用法类似于 CSS,并在 CSS 的基础上,扩展了 rpx 尺寸单位和样式导入功能。

    WXSS 可以使用内联样式,但这样会影响渲染速度。

    每个页面自己的 page.wxss 样式表,会覆盖全局样式表 app.wxss。

百度网友c82c6d0
2019-07-01 · 贡献了超过195个回答
知道答主
回答量:195
采纳率:0%
帮助的人:12万
展开全部
说到小程序开发的坑,相信大家都有听说过小程序开发骗局,毫无疑问这是最大的坑。接下来为大家整理小程序开发常见的坑,希望能够帮到大家:
1、小程序开发骗局,一些不正规的非法分子组成的欺诈团伙,常见的套路就是以“微信官方授权”“微信合作第三方公司”等为幌子忽悠客户;夸大小程序名称的作用,煽动客户进行抢注等等
2、低价小程序开发,对客户宣传是定制开发,但实质上交付时随便拿了小程序模板源码交付了事,根本无法正常使用,或者能够使用但存在各种bug
3、一键生成的小程序模板,忽悠客户低价购买模板,但购买的小程序模板根本无法自定义修改内容,没有跟客户介绍具体的功能,导致客户想要使用高级功能只能缴费升级
以上这些就是小程序开发常见的坑,借此提醒各位小程序开发需求者在选择小程序开发公司合作时务必要留心,一定要选择专业可靠的小程序开发公司。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
壹来客
2018-12-06 · 专业的小程序定制开发公司,良心售后服务
壹来客
壹来客是专业的小程序定制开发公司,专注小程序定制开发与运营,定制开发案例已超过5000个,专注为企业和商家提供优质且实惠的小程序定制开发服务。
向TA提问
展开全部

小程序开发有一下两种典型的“坑”

  1. 一键生成的模板小程序,后期无法二次开发,到时业务受阻或需要重新开发小程序

  2. 选择价格过低的开发公司,不提供售后服务,售后无门

希望对大家有帮助!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天客通
2019-03-18 · 解决商家问题,助力每一位商家经营成功
天客通
天客通(漯河市天客通网络科技有限公司)成立于2017年,是一家互联网企业。为商家提供软件服务,助力每一位商家经营成功。
向TA提问
展开全部
目前小程序越来越火,很多软件公司加入了小程序开发的队伍。现在市场上小程序开发商也是鱼目混杂,想要找到一家比较有实力的小程序开发公司,可以从以下方面考虑:
1、适合自己的,根据你的功能需求寻找合适的,目前已经有很多现成的模板可以直接用,既能满足要求又可以不用定制开发少花钱。
2、看小程序的功能是否丰富,要知道做小程序是第一步,后面利用各种活动推广去发展你的用户才是最重要的,所以一个小程序的营销插件决定了你以后推广的力度。
3、小程序装修是否支持自定义装修,有些小程序装修风格比较单一,只能按照模板装修,相对于自定义拖拽式装修就单调很多。
4、产品是否成熟稳定,有没有经过市场检验,是否在持续升级中。
5、售后服务是否跟得上,后面你们肯定会遇到一些自己解决不了的这样那样的问题,需要技术售后支持,如果服务跟不上只会耽误你们的工作进程。
6、价格合理、性价比高。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
亿快科技咖啡豆
2019-02-23
知道答主
回答量:9
采纳率:0%
帮助的人:6884
展开全部
  1. 准确地说,没有给到你源代码的小程序都不能进行二次开发,因为这套源代码里面除了挂了你的账号,还有其他人,这就是所谓的标准版的开账号的小程序,这种小程序由于已经是开发好了的,不需要再额外付出什么开发成本,所以费用较二次开发的低一些;

  2. 如果是要定制开发,一定要认清楚你选择的这个开发公司有没有能力开发好你的产品,这个问题一般从开发公司有多少个纯技术就可以看出来,切莫找了一个没有开发能力的公司进行定制开发,因为他自己公司没有开发能力,只能外包给其他公司,这样一来,开发的成本上升,其次是沟通成本增加。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(9)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式