微信小程序入门 ——增删改查+页面跳转+传值取值+布局样式

**目标场景
**分类管理

技术点
读取分类列表

点击某分类进入编辑页,操作编辑与删除

点击列表页底部按钮,跳转添加,共用编辑页

效果

列表页js

var Bmob = require('../../utils/bmob.js');var that;

Page({

 onLoad: function () {

 that = this;

 },

 onShow: function () {

 that.loadCategories();

 },

 loadCategories: function () { 

 var query = new Bmob.Query('Category');

 query.limit(Number.Max_VALUE);

 query.find().then(function (categories) {

 console.log(categories);

 that.setData({

 categories: categories

 });

 });

 },

 add: function () { 

 // 跳转添加页面

 wx.navigateTo({

 url: '../add/add'

 });

 },

})

可以看到,上面使用了onShow代替了onLoad作为加载请求loadCategories,这是因为考虑到添加完毕后会有返回上页,能和自刷新最新数据。
相应的布局页面

 class="item" wx:for="{{categories}}" wx:key="">

  class="title" url="../add/add?objectId={{item.objectId}}" open-type="navigate" hover-class="none">{{item.title}}

 class="add-category" bindtap="add">

  src="/images/add.png" class="icon" />

  class="caption">新增分类

列表页跳转可以使用代替的bindtap,这样更简洁一些;而底部的添加按钮使用position: fixed固定底部;wx:for循环提供objectId作为参数,以传递给编辑页面。
编辑页面

var Bmob = require('../../utils/bmob.js');var that;

Page({

 onLoad: function (options) {

 that = this; 

 if (options.objectId) {

 // 缓存数据

 that.setData({

 isEdit: true,

 objectId: options.objectId

 }); 

 // 请求待编辑的分类对象

 var query = new Bmob.Query('Category');

 query.get(that.data.objectId).then(function (category) {

 that.setData({

 category: category

 });

 });

 }

 },

 add: function (e) {

 var form = e.detail.value;

 if (form.title == '') {

 wx.showModal({

 title: '请填写分类名称',

 showCancel: false

 }); 

 return;

 } 

 // 添加或者修改分类

 var category = new Bmob.Object('Category');

 // 修改模式

 if (that.data.isEdit) {

 category = that.data.category;

 }

 category.set('title', form.title);

 category.save().then(function (updatedCategory) {

 // that.setData({

 // category: updatedCategory

 // });

 // 操作成功提示并返回上一页

 wx.showModal({

 title: that.data.isEdit ? '修改成功' : '添加成功',

 showCancel: false,

 success: function () {

 wx.navigateBack();

 }

 });

 });

 }, 

 delete: function () {

 // 确认删除对话框

 wx.showModal({

 title: '确认删除',

 success: function (res) {

 if (res.confirm) { 

 var category = that.data.category;

 category.destroy().then(function (result) {

 wx.showModal({

 title: '删除成功',

 showCancel: false,

 success: function () {

 wx.navigateBack();

 }

 });

 });

 }

 }

 });

 }

})

通过onLoad事件的options回调接受objectId参数,如果存在代表是编辑状态,反之添加
添加页面,通过form取值,bindtap事件中,通用e.detail.value拿到form对象
wx.showModal,带参showCancel决定取消按钮是不是显示,点击确认或取消按钮支持回调,而showToast虽然能回调,但在wx.navigateBack()同时并发,导致会看不清Toast上的文本就返回到上一页了,所以基本都改用showModal了。res.confirm代表用户点击了确认按钮而非取消按钮。
编辑页面布局

 onsubmit="add">

  class="item">

  class="title">分类名称

  class="subtitle">

  type="text" name="title" value="{{category.title}}" placeholder="请填写分类名称" />

 

 

  class="buttons">

  wx:if="{{isEdit}}" class="delete" bindtap="delete">删除

  form-type="submit" class="confirm">{{isEdit ? '修改' : '添加'}}

判断是不是编辑状态isEdit,分别显示修改或添加样式,相应的事件也有不同,分别对应onsubmit方法与delete方法。 编辑页样式

/*每行*/

.item { 

 align-items: center;

 border-bottom: 1px solid #eee;

 background: white;

 margin-left: 0;

}

/*确认按钮*/

.confirm {

 background: #4cd964;

 color: white; 

 margin: 10px; 

 flex: 1;

}

/*删除按钮*/

.delete {

 background: #da634f; 

 color: white; 

 margin: 10px; 

 flex: 1;

}

/*标题与文本框1/3开*/

.title {

 flex: 1;

}

.subtitle {

 flex: 3;

}

/*编辑与添加按钮*/

.buttons {

 display: flex; 

 flex-direction: row;

}

文本标签与input标记,使用flex,1: 3比例对开,编辑与删除则1: 1对半开

转载于:https://my.oschina.net/dreawercn/blog/3032474

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值