簡體   English   中英

Onsen UI PostPush事件回調多次觸發

[英]Onsen UI PostPush event callback fires multiple times

我正在開發一個OnsenUI支持的應用程序。 它有多個頁面。

我正在使用postpush事件來觸發我的ajax數據請求。

如下。

$scope.navi.on('postpush', function () {
//ajax code here
});

現在的問題是,我的完整代碼如下所示。

$scope.navi.pushPage('linkone.html'); 
$scope.navi.on('postpush', function () {
//ajax 1
});

 $scope.navi.pushPage('linktwo.html'); 
$scope.navi.on('postpush', function () {
//ajax 2
});

如果我導航到linkone.html頁面,則會觸發ajax1。 之后,如果我導航到linktwo.html,它會觸發ajax1和ajax2。

我只想解雇相關的ajax。 但這兩件事都被解雇了。 如果我繼續瀏覽頁面,最終會有太多請求開始被解雇。

任何人都可以幫我這個嗎?

你解釋的實際上是預期的行為。 on方法添加一個偵聽器,以便在事件觸發時執行。 您似乎在不刪除它們的情況下添加更多偵聽器。

替代方案

  1. 一個簡單的替代方法是只執行一次的once方法,然后它將自動刪除監聽器。

  2. 您可以將ajax排隊為pushPage的回調,而不是添加監聽pushPage - 以下任何一種:

     $scope.navi.pushPage('linkone.html', {callback: ajax1}); $scope.navi.pushPage('linkone.html').then(ajax1); 

    應該沒事。

  3. 您可以添加一個根據您的頁面執行不同操作的偵聽器:

     $scope.navi.pushPage('linkone.html'); $scope.navi.on('postpush', function(ev){ if (ev.enterPage.id === 'page1') { ajax1(); } else if (ev.enterPage.id === 'page2') { ajax2(); } }); 

    使用頁面的init事件也可能實現同樣的目的。

     document.addEventListener('init', function(ev) { if (ev.target.id === 'page1') { ajax1(); } else if (ev.target.id === 'page2') { ajax2(); } }); 

    但請注意,在第三個替代頁面page1page2必須是ons-page元素的id, 而不是模板'。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM