2016-12-23 27 views
0

我建立一個應用程序中,我保存一個控制器會話存儲數據更改會話存儲,我用$interval不斷觀看sessionStorage檢查,像這樣的變化。

$interval(function(){ 
     vm.myData = JSON.parse(sessionStorage.getItem('patient')); 
    }, 300) 

我覺得這是不是保持觀望的好方法,因爲,例如,如果我想允許用戶編輯一些vm.myData數據,他們不能,因爲變量保持更新自己。

有沒有辦法簡單地看sessionStorage的對象,看是否'patient'發生了變化?我試圖使用$watch函數,但我不認爲我很理解它是如何工作的。

+0

不知道這是否會工作,但爲什麼不使用$表,並指定會話存儲到rootScope變種。 – alphapilgrim

+0

爲什麼你不發起事件並聽取它,而不是不斷地觀看會話存儲。這對你的應用來說也是一個巨大的性能提升。 – 31piy

+0

考慮到只有一個應用程序副本,sessionStorage的讀/寫操作可以通過服務getter/setter方法來管理。在這種情況下,RxJS的可觀察性是有益的。順便說一下,使用$ interval進行輪詢是一件可怕的事情,它會在每個時間間隔上產生一個摘要。 – estus

回答

0

一種方法是使用控制器$doCheck生命週期掛鉤:

this.$doCheck = function() { 
    var previousValue; 
    var currentValue; 
    previousValue = currentValue; 
    currentValue = sessionStorage.getItem('patient')); 
    if (currentValue !== previousValue) { 
     console.log("patient changed"); 
    }; 
}; 

欲瞭解更多信息,請參閱AngularJS $compile Service API Reference -- Life-Cycle Hooks