4

私は現在、これまでのところ素晴らしい Electron を使用してアプリケーションを構築しています。

アプリの主な状態、主にユーザー状態 (プロファイルと認証済みなど)を使用Vue.jsして管理しています。Vuex

Vuex新しいウィンドウを開いて、メインウィンドウと同じ状態にすることができるかどうか疑問に思っています.

現在、ユーザーが認証されていない場合、アプリの起動時にログインウィンドウが表示されますが、これは正常に機能します。

function createLoginWindow() {
  loginWindow = new BrowserWindow({ width: 600, height: 300, frame: false, show: false });
  loginWindow.loadURL(`file://${__dirname}/app/index.html`);
  loginWindow.on('closed', () => { loginWindow = null; });
  loginWindow.once('ready-to-show', () => {
    loginWindow.show();
  })
}

ユーザーはログイン フォームを実行し、成功した場合は次の関数を起動します。

function showMainWindow() {
  loginWindow.close(); // Also sets to null in `close` event
  mainWindow = new BrowserWindow({width: 1280, height: 1024, show: false});
  mainWindow.loadURL(`file://${__dirname}/app/index.html?loadMainView=true`);
  mainWindow.once('resize', () => {
    mainWindow.show();

  })
}

これはすべて機能しますが、唯一の問題は、それが共有されてmainWindowいたものと同じものを共有しないことですthis.$storeloginWindow.close()

を新しいウィンドウに渡す方法はありますか?常にそれを非表示にしたり、ビューを変更したりして、Vuex this.$storeすべてを詰め込む必要はありません。状態mainWindowVuex

説明が必要な場合は、質問してください。ありがとう。

4

3 に答える 3

0

アプリを完全に単一ページにするという GuyC の提案は理にかなっています。SPA でルート間のナビゲーションを管理するには、vue-router を試してください。

そして、私はあなたが望むことをするための大まかな解決策を持っています.vue-routerのようなものをインポートする労力を節約しますが、構成されたルートでページ内のコンポーネントを置き換えることは、新しいページをロードするよりも常にスムーズです.新しいウィンドウを開くと、windowオブジェクトの場合、共有状態をwindowのセッション ストレージ (またはグローバル オブジェクト) に設定し、新しいウィンドウで vuex を使用してそれを取得できますcreated() {if(UIDNotInVuex) tryGetItFromSessionStorage();}。これcreatedは、一部のコンポーネントで作成されたフックです。

于 2016-11-18T09:54:54.343 に答える