HBuildermui页⾯间传值的⼏种⽅式
采⽤MUI开发APP时,页⾯跳转传值⽆疑是很多初学者遇到的难题之⼀,我在开发时也遇到了同样的问题,所以在这⾥总结了⼀下,⽅便以后查阅。
⼀、页⾯预加载时传值
mui.init({mui框架常用方法
preloadPages:[{
url:prelaod-page-url,
id:preload-page-id,
styles:{},
extras:{
name:'zqm'
},//在这⾥添加要传递的参数
...
},
...]
});
或如下
var page = mui.preload({
url:new-page-url,
id:new-page-id,
styles:{},
extras:{
name:'zqm'    //⾃定义扩展参数
}
});
通过上述⽅法预加载页⾯,然后在加载的那个页⾯中接受参数。
mui.plusReady(function(){
var self = plus.webview.currentWebview();
var name = self.name;//获得参数
});
⼆、通过mui.openWindow打开窗⼝向页⾯传递参数
这种传值⽅法通常我们的做法如下:
在参数⽣成页⾯中
mui.openWindow({
id: 'list.html',
url: 'list.html',
show: {
aniShow: 'pop-in'
},
extras: {    //extras⾥⾯的就是参数了
name: "zqm"
},
waiting: {
autoShow: true, //⾃动显⽰等待框,默认为true
}
});
在参数接收页⾯中
mui.plusReady(function(){
var self = plus.webview.currentWebview();
var name = self.name;//获得参数
});
通常我们传参就这么进⾏,但是由于这个页⾯,多次被打开,发⽣了类似缓存的现象,所以,有时候这个plusReady不能保证每次都能执⾏。所以,我增加了⼀个⾃定义事件,来改变这个情况,实现⽅法如下(我是双管齐下,plusReady也获取值,⾃定义事件也获取值)。
那好,下⾯我演⽰⼀下我的⽅法(下⾯这个监听⼀个按钮,然后打开⼀个页⾯);
var apage = null;
mui.plusReady(function() {
mui.preload({
url: "list.html",
id: "list.html", //默认使⽤当前页⾯的url作为id
styles: {}, //窗⼝参数
extras: { name: "预加载的参数" } //⾃定义扩展参数
});
if(apage == null) {        //要进⼊list.html,第⼀次,它肯定为空,所以,此时下⾯的这个fire⽅法,是不会执⾏的。
apage = WebviewById("list.html");
}
mui.fire(apage, 'hahaha',{ name: "zqm" });
apage.show();
});
});
接下来,就到了参数接收页⾯,如下(⾸先,我们还是要在plusReady⾥⾯接收⼀次,因为你不能保证这次是初次打开还是第⼆次打开页⾯,所以,这个还是需要的。)
mui.plusReady(function(){
var self = plus.webview.currentWebview();
var name = self.name;//获得参数
});
但是如果这个是⾮⾸次打开的话,就不⼀定进来plusReady了,所以,参数可能接收失败了,这⾥⾯,我们就要接收⾃定义事件传过来的参数了,就是前⾯我们的fire那⾥了。
//添加上⼀个页⾯⾃定义事件监听
window.addEventListener('hahaha', function(event) {
//获得事件参数
var name= event.detail.name;
});
这样,我们就能把这个参数获取到,双重保证,就没有问题了。(如果你们需要谨慎⼀些,可以把这个⾃定义事件的监听延迟个300毫秒,保证接收的概率,因为如果是这个⾃定义事件优先执⾏了,然后他⼜去执⾏这个plusReady,那就会冲突了。)
三、通过本地存储传值
发送参数的页⾯:plus.storage.setItem("targetId","123");
接收参数的页⾯:Item("targetId");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。