[英]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
方法添加一個偵聽器,以便在事件觸發時執行。 您似乎在不刪除它們的情況下添加更多偵聽器。
替代方案 :
一個簡單的替代方法是只執行一次的once
方法,然后它將自動刪除監聽器。
您可以將ajax排隊為pushPage
的回調,而不是添加監聽pushPage
- 以下任何一種:
$scope.navi.pushPage('linkone.html', {callback: ajax1}); $scope.navi.pushPage('linkone.html').then(ajax1);
應該沒事。
您可以添加一個根據您的頁面執行不同操作的偵聽器:
$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(); } });
但請注意,在第三個替代頁面page1
和page2
必須是ons-page
元素的id, 而不是模板'。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.