2017-10-20 2 views
0

두 페이지가 있습니다 : my-view1my-view2입니다. my-view1에는 LocalStorage에서 데이터를 추가 및 제거하는 두 개의 단추가 있습니다. my-view2에는 두 개의 간단한 div가 있는데 READ (표시) 총 값과 지난 6 개월의 총 값입니다.Polymer - JavaScript - 데이터 바인딩 : 실시간 업데이트?

그러나 두 번째 페이지에서는 페이지를 새로 고치지 않으면 값이 업데이트되지 않습니다. my-view2의 값이 페이지가로드 될 때마다 (캐시 된 경우에도) 자동으로 업데이트되기를 원합니다.

여기 my-view2가있는 plnkr입니다. 그래서 내가하려는 일을 방해 할 수 있습니다.

https://plnkr.co/edit/ul4T2mduxjElCN4rUUKd?p=info

내가 어떻게 할 수 있습니까?

+0

와 재생을 위해 여기

working plunk 또는 당신은 당신을 위해 eventstream를 사용할 수있는 백엔드가 그 목적. 그리고 현재 시나리오의 경우 변경 사항이 사용자 페이지에 반영되면 setinterval을 사용하여 매 초마다 로컬 저장소를 확인할 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다. 현재 PWA로이 페이지를 만들고 있습니다. 오프라인에서도 웹 소켓이 작동합니까? 또한 setInterval을 사용하면 앱이 잠자기 상태가됩니까? 또는 계속 실행됩니까? – unkn0wnx

+0

setInterval은 오프라인 모드에서 작동하며 예를 들어 앱이 절전 모드에 있으면 간격 확인을 중지하고 절전 모드에서 깨어날 때 재개 할 수 있음을 나타내는 로직을 설정할 수 있습니다. 그러나 웹 소켓의 경우 인터넷 연결이 필요하며 myview-1과 myview-2를 나란히 사용하는 경우 게시 메시지를 사용하여 my-view-2를 통신하고 업데이트 할 수 있습니다. –

답변

0

당신은 로컬 스토리지 업데이트 할 때 트리거 내-뷰 2에서 몇 가지 소품을 업데이트 storage 이벤트를 수신 할 수 있습니다 저장 이벤트가되지 않기 때문에 행동의 here 설명 : EDIT (working plunk)

<my-view-2 id="myView2"></my-view-2> 
<script> 
    window.onstorage = function(e) { 
    if (e.key !== 'someKeyYouWant') return; 
    document.getElementById('myView2').set('someProp', { 
     oldValue: e.oldValue, 
     newValue: e.newValue 
    }); 
    }; 
</script> 

saveToLs(e) { 
    e.preventDefault(); 
    const newName = this.get('dogName'); 
    const ls = window.localStorage; 
    const synthEvent = new StorageEvent('storage'); 
    const eventConfig = [ 
    'storage', 
    true, 
    true, 
    'myDog', 
    ls.getItem('myDog'), 
    newName 
    ]; 

    synthEvent.initStorageEvent(...eventConfig); 

    setTimeout((() => { // ensure async queue 
    ls.setItem('myDog', newName); 
    this.dispatchEvent(synthEvent); 
    }).bind(this), 0); 
} 

... 그리고 듣기 측 :

당신이 당신의 자신의 스토리지 이벤트를 트리거 할 수 있도록, 아래의 방법을 고려, 변경을 원래 창에 트리거
handleStorageUpdate(e) { 
    if (e.key !== 'myDog' || e.newValue === this.get('dogName')) return; 
    this.set('dogName', e.newValue); 
} 

if 동일한 값으로 조건부 중복 업데이트를 처리합니다. 당신이 당신의 페이지 (보기-2)를 업데이트하는 값이 변경되어 지금까지 동적으로 할 때 당신은 WebSocket을 사용할 수 있습니다

+0

안녕하세요! 답장을 보내 주셔서 감사합니다. 'my-view2' 페이지에 코드를 추가했지만, 여전히 작동시킬 수는 없습니다. 나는 심지어 "값 바꾸기 (value replacement)"를 console.log로 대체하여 LocalStorage를 읽는지 확인하려고 시도했으나 그렇지 않습니다. 나는 코드에서 뭔가 나쁜 일을하고 있다고 확신하지만, 어디서부터인지 이해할 수는 없다. plnkr을 만들었습니다. https://plnkr.co/edit/HCIw7ExZ2rg7XEjQMLZi?p=catalogue – unkn0wnx

+0

https://stackoverflow.com/a/4679754/2533680에서 설명한 동작으로 인해 솔루션이 자체적으로 작동하지 않습니다. 실례로 나의 대답을 업데이트 할 것이다. –

+0

그래서 내가 할 수있는 방법이 없습니까? – unkn0wnx

관련 문제