リスト ビューと詳細ビューの 2 つのビューを持つ単純な SPA があります。StateService というサービスを使用して、2 つのコントローラー間でデータを渡します。
ユーザーがブラウザ ページを更新するケースを処理しようとしています。これが発生すると、StateService が再初期化され、詳細ビューが機能しなくなります。これがいつ発生したかを検出し、ユーザーをリスト ビューに戻したいと考えています。
これは、私の State Service の簡略版です。サービスが適切に初期化されていないことを検出できるように、詳細ビューに切り替えるときに isInitialized を true に設定するという考え方です。
var StateService = function () {
var isInitialized = false;
};
これは、コントローラーの最初の数行で試したことです。StateService がコントローラーに正常に挿入されています。
//always returns [Object], on refresh or navigating from list page
alert(StateService);
// this next line always returns undefined. Should be false since I am initializing
// the value to false?
alert(StateService.isInitialized);
//One of the many combinations I have tried . . .
if (!StateService.isInitialized | StateService.isInitialized == false) {
$location.path('/');
}
これが javascript または angular の理解のギャップであるかどうかはわかりませんが、上記のコードを機能させる方法についての考え、またはユーザーがページを更新したときに何をすべきかについてのより良いアイデアはありますか?
編集
nycynik の推奨に従って console.log を使用すると、次のように表示されます。
c {} [StateService]
未定義 [StateService.isInitialized]
したがって、このコードがヒットすると、StateService 自体は単なる空のオブジェクトのように見えます。他のコントローラー (リスト ビューを処理するコントローラー) から同じ結果が得られます。
コメントに記載されているように、サービスはそれ以外の場合は期待どおりに機能するようです.