1. 程式人生 > >MUI頁面間傳值問題

MUI頁面間傳值問題

在使用MUI做APP的時候,很多情況下都需要頁面間通訊傳值,mui提供了一個機制來解決這個問題:自定義事件;

比如在A頁面,需要傳參到B頁面,那麼此時B頁面就是目標介面;

在A頁面:

mui.fire(target,event,data)
在這裡target是需傳值的目標webview (plus.webview.getWebviewById("頁面id")),event是自定義的事件名,data是一個要傳遞的json格式的資料

在B頁面:

window.addEventListener('customEvent',function(event){
  //通過event.detail可獲得傳遞過來的引數內容
  ....
});

假設如下場景:從新聞列表頁面進入新聞詳情頁面,新聞詳情頁面為共用頁面,通過傳遞新聞ID通知詳情頁面需要顯示具體哪個新聞,詳情頁面再動態向伺服器請求資料,mui要實現類似需求可通過如下步驟實現:

  • 在列表頁面中預載入詳情頁面(假設為detail.html)
  • 列表頁面在點選新聞標題時,首先,獲得該新聞id,觸發詳情頁面的newsId事件,並將新聞id作為事件引數傳遞過去;然後再開啟詳情頁面;
  • 詳情頁面監聽newsId自定義事件

列表頁面程式碼如下:

//初始化預載入詳情頁面
mui.init({
  preloadPages:[{
    id:'detail.html',
    url:'detail.html'           
  }
  ]
});

var detailPage = null;
//新增列表項的點選事件
mui('.mui-content').on('tap', 'a', function(e) {
  var id = this.getAttribute('id');
  //獲得詳情頁面
  if(!detailPage){
    detailPage = plus.webview.getWebviewById('detail.html');
  }
  //觸發詳情頁面的newsId事件
  mui.fire(detailPage,'newsId',{
    id:id
  });
//開啟詳情頁面          
  mui.openWindow({
    id:'detail.html'
  });
}); 
詳情頁面程式碼如下:

//新增newId自定義事件監聽
window.addEventListener('newsId',function(event){
  //獲得事件引數
  var id = event.detail.id;
  //根據id向伺服器請求新聞詳情
  .....
});