2016-07-10 48 views
1

我有2個意見('索引'和'項目')。

'索引'有一個按鈕,只是去'項目'。

'item'有一個控制器,它調用一個廣播事件的服務,並且控制器不停地監聽這個事件來爲一個對象填充一個值。

問題:在第一次點擊按鈕,我去'項目',我得到正確的對象值。但是,如果我點擊後退按鈕(返回'索引')並再次點擊相同的按鈕,我去'項目',但對象是空的。

爲MyService

update: function() { 
    $rootScope.$broadcast('event:item-updated'); 
    console.log("broadcast item updated"); 
    return; 
} 

ItemCtrl

.controller('ItemCtrl', function($scope, $state, MyService) { 
    console.log("Item controller"); 
    MyService.update(); 
    $scope.item = {}; 
    $scope.$on('event:item-updated', function(e, status) { 
    $scope.item = {"name": "My Item"}; 
    console.log("on item updated"); 
    }); 
} 

指數HTML

<ion-view view-title="Index"> 
    <ion-content> 
    <div> 
     <button class="button" ui-sref='app.item'> 
     Item 
     </button> 
    </div> 
    </ion-content> 
</ion-view> 

項目HTML

<ion-view view-title="Item"> 
    <ion-content> 
    <div> 
     {{item.name}} 
    </div> 
    </ion-content> 
</ion-view> 

使用一些的console.log(),我可以檢查:

首播時間:

  • 項目控制器
  • 廣播產品的更新
  • 上項目更新

二時間:

  • 項目控制器
  • 廣播產品的更新

所以,出於某種原因,當我去到「項」其他時間監聽器不工作。

+2

您能否爲您的問題提供重拳或小提琴? – varit05

+0

使用服務來存儲物品 – charlietfl

+0

有些人回答了我的問題,這對我很有幫助。我應該在調用MyService.update()之前聲明$ listener。我仍然不知道它爲什麼在第一次運作,並且在其他時間不運作。 –

回答

0

我解決了更改我聲明偵聽器並調用服務器的順序的問題。

.controller('ItemCtrl', function($scope, $state, MyService) { 
    console.log("Item controller"); 
    $scope.item = {}; 
    $scope.$on('event:item-updated', function(e, status) { 
    $scope.item = {"name": "My Item"}; 
    console.log("on item updated"); 
    }); 
    MyService.update(); 
} 

因此,我應該在調用服務(廣播事件)之前聲明偵聽器。