Может ли компонент aframe-state отслеживать состояние в разных сценах? - PullRequest
0 голосов
/ 30 мая 2018

У меня есть приложение в виде рамки (угловое 5), в котором есть две сцены.Я хочу отслеживать состояние приложения, например параметры конфигурации, используя компонент aframe-state-component .Я хочу получить доступ к совокупному состоянию в обеих сценах.Однако опытным путем кажется, что каждый раз, когда я переключаюсь на другую сцену, все переменные в состоянии сбрасываются в исходное состояние.

Кроме того, тот факт, что вы можете получить доступ к переменным состояния с помощью следующего выражения:

AFRAME.scenes[0].systems.state.state.score

, подсказывает мне, что состояние связано только с одной сценой (сцены [0] равнык текущей сцене).

Сначала я подумал, что это угловая проблема, так как предполагаемая одноэлементная служба, где я инициализировал состояние, инициализировалась при каждой передаче сцены.Но я обнаружил, что связывание с использованием углового маршрутизатора:

this.router.navigate([(evt.target as any).previousSibling.getAttribute('link').href, {}])

Вместо значения по умолчанию:

window.location = this.data.href

Исправлена ​​эта проблема.Таким образом, теперь, похоже, проблема с A-рамкой.

Является ли понятие, что этот компонент может использоваться только intra-scene , а не inter-scene aправильное предположение?

Примечание. Я также экспериментирую с angular-redux / store , и, похоже, нет проблем с сохранением состояния между сценами, но я бы предпочел использовать aframe-state-компонент , как кажется, проще.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете хранить в localStorage и восстанавливать при загрузке.Что-то вроде:

window.addEventListener('beforeunload', () => {
  localStorage.setItem('state', JSON.parse(state));
});

initialState: localStorage.getItem('state') 
  ? JSON.parse(localStorage.getItem('state'))
  : {
  // Initial state...
}

РЕДАКТИРОВАТЬ: понял, что вы имели в виду изменения сцены в приложении?Вы можете сделать что-то подобное.Когда сцена выгружена, сохраните ее где-нибудь, затем компонент состояния проверит, существует ли она?

0 голосов
/ 30 мая 2018

Компонент состояния, похоже, не хранит состояния, поэтому он будет работать, если у вас есть две сцены на одной странице:

<a-scene></a-scene> 
<a-scene visible="false"></a-scene>

и переключите их, установив атрибут visible.Я также показываю, что AFRAME.scenes относится к сценам на странице, поскольку вы можете регистрировать AFRAME.scenes[0] и AFRAME.scenes[1] в приведенном выше «примере» (или в this fiddle).

...