赞
踩
使用微信开发者工具打开项目后,可以看到小程序的大概框架,项目文件架下由Pages,utils,app.*等文件夹及文件组成。
其中,app.json文件用于配置整个小程序的页面路径,窗口风格,导航和全局属性。utils文件夹 下用于存放通用组件。Pages文件夹下的每个子文件夹代表一个页面。list文件夹为Demo的主页,用于呈现记录的事件列表,在app.json文件配置时需要把这个路径写在第一个。add文件为记录事件时的编辑页面。
这个记事本Demo实现的功能如下:
点击按钮增加文本
点击文本列表中的文本进行更改
长按文件列表中的文本进行删除
可以进行本地存储
list.wxml是文件的视图层,list.js是文件的逻辑层。在逻辑层中,Page.data可以注册数据,然后视图层就可以通过{{属性名}}进行调用,视图层中各个组件的事件也在Page中进行注册。Demo用到的组件为view的列表呈现,在wx:for使用时,{{index}},{{item}}都是默认的,代表循环时的下标和元素。
<!--pages/list.wxml-->
<block wx:for="{{mylist}}">
<view>
<view bindtap="change" data-id="{{index}}" bindlongtap="remove" id="{{item.time}}" data-content="{{item.content}}">{{item.content}}</view>
</view>
</block>
<button bindtap="add">添加事件</button>
blindtap为绑定的点击事件。bindlongtap为绑定的长按事件。在选定功能中,还需要每个文本对应的id和值。当视图层触发事件时,逻辑层对应的事件函数会收到一个事件对象,事件对象的currentTarget属性为当前组件的属性值集合,所以通过这个属性就可以拿到组件的id和值。组件属性data-*的值就对应currentTarget.dataset中对应的值。
增删改对应add,change,remove函数。
add:function(){ wx.navigateTo({ url: '../add/index', }) }, remove:function(e){ let that = this wx.showModal({ title: 'en~?', content:'确定要删除吗?', success:function(res){ if(res.confirm){ var arr = wx.getStorageSync('txt') arr.splice(e.currentTarget.dataset.id,1) wx.setStorageSync('txt', arr) that.onLoad() }else if(res.cancel) { } } }) }, change:function(event){ //console.log(event); console.log(event.currentTarget.dataset.content); wx.navigateTo({ url: '../add/index?id=' + event.currentTarget.id + '&content=' +event.currentTarget.dataset.content, }) },
增和改函数都涉及到小程序页面间的数据传递,通过wx.navigateTo( )函数可以进行页面跳转和带参数跳转。在涉及跳转、刷新、数据初始化等操作时,都将使用到onload函数。带参数跳转时,在跳转页面的onLoad函数可通过一个options参数接到上一个页面传递过来的参数,属性名与传递时相同。
在刷新时,需要注意onLoad函数的作用域,不能直接用,需要引用指向
add页面注册onLoad函数如下
onLoad: function (options) {
console.log(this.data)
this.setData({
time:options.id,
content:options.content
});
console.log(this.data)
},
add页面为编辑页面
<view><text>{{time}}</text></view
><view>
<input type="text" placeholder="请输入内容" bindinput="change" confirm-type="done" value="{{content}}"></input>
</view>
<view><button bindtap="additem">提交</button><button bindtap="cancel">取消</button></view>
逻辑页面注册的事件函数如下
change:function(e){ this.setData({content:e.detail.value}) }, additem:function(){ var input =[]; var flag = true; var arr = wx.getStorageSync('txt'); //判断是否是新增数据 if(!this.data.time){ this.setData({ time:(new Date()).valueOf() }) } if(arr){ var curtime = this.data.time var content = this.data.content arr.forEach(function(item){ console.log('debug') console.log(item) //console.log(item.time+"===="+curtime) if(item.time == curtime){ item.content = content flag = false wx.setStorageSync('txt', arr) } }) ; if(flag){ arr.push(this.data) wx.setStorageSync('txt', arr)} }else{ input.push(this.data) wx.setStorageSync('txt', input) } wx.navigateBack() }, cancel:function(){ wx.navigateBack({ complete: (res) => {}, }) },
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。