最近在做apicloud 开发的app ,有个需求是这样的: A 页面是个列表页面,点击详情按钮可以进入到B 页面,在详情页面操作后,回退到A 页面,并且需要刷新A 页面的数据。
从网上百度到的方法有两个:
方法1:api.execScript
这个方法的使用是这样的:
1.1 在A 页面添加一个方法:比如test()
这个test() 方法可以存放列表的更新方法。
1.2 在B 页面使用api.execScript 调用A 页面的方法
B 页面代码如下:
var param='参数';
var fun = 'test('+param+')';
api.execScript({
name:'A页面的name',
script: fun
});
A 页面代码如下:
test(val){
...
}
感觉上面的写法没有问题,但是实际使用的时候,并没有实现A 页面列表的刷新效果。
方法2:api.addEventListener 与api.sendEvent
这个方法的使用是这样的:
2.1 在A 页面添加:api.addEventListener
api.addEventListener({
name: 'refreshInStorage'
}, function(ret, err) {
vm.refreshData();
});
上面代码中的vm 是我给new Vue({}) 定义的变量参数名,refreshData 就是new Vue({}) 中的methods 中的一个方法;
为了防止重复添加同一个监听事件,在创建监听事件之前可以使用:api.removeEventListener
代码如下:
api.removeEventListener({
name: 'refreshInStorage'
});
api.addEventListener({
name: 'refreshInStorage'
}, function(ret, err) {
vm.refreshData();
});
2.2 在B 页面回退上一页的方法中:使用api.sendEvent 触发refreshInStorage 的监听方法
api.sendEvent({
name: 'refreshInStorage',
extra: {}
});
api.closeWin();
完成!!!
|