Кнопка переключения со значением из sessionStorage

У меня есть небольшая кнопка переключения, и я сохраняю значение (true или false) в sessionStorage, а при загрузке страницы, если значение существует в sessionStorage, я беру его и показываю кнопку переключения в зависимости от значения, а также в зависимости от этого значения я показываю разные контент на моей странице angularjs.

Проблема в том, что я сохраняю значение в sessionStorage и снова вызываю это значение, но моя кнопка переключения и мой оператор ng-if не получают этого. Вот мой код ниже.

Вопрос в том, как и почему я не могу получить это в операторе ng-if? (в моей скрипке я использую ng-show, потому что ng-if не работает в этом примере)

рабочая рабочий пример

var app = angular.module("ap", []);

app.controller("con", function($scope) {
  if (sessionStorage.getItem("modePreview")) {
    $scope.basicMode = sessionStorage.getItem("modePreview");
  } else {
    $scope.basicMode = true;
  }
  $scope.sendModeValueToStorage = function() {
    sessionStorage.setItem(
      "modePreview",
      ($scope.basicMode = !$scope.basicMode)
    );
  };

});
.activeSwitch,
.inactiveSwitch {
  font-size: 26px;
  cursor: pointer;
}

i.activeSwitch {
  color: #e4e4e471;
}

i.inactiveSwitch {
  color: #e4e4e471;
}

.fontStyleUserControlPannel {
  font-size: 18px;
  font-weight: 600;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.min.js"></script>
<link href = "https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel = "stylesheet"/>
<body ng-app = "ap" ng-controller = "con">

  Advanced mode <i class = "fa fa-toggle-on fa-2x" ng-click = "sendModeValueToStorage()" ng-class = "{'fa-rotate-180' : basicMode}"></i> Basic mod

  <div ng-show = "!basicMode">
    <h3>
      Basic mode
    </h3>
  </div>
  <div ng-show = "basicMode">
    <h3>
      Advanced mode
    </h3>
  </div>
</body>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
219
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Несколько вопросов:

Во-первых, в вашей скрипке вы используете AngularJS версии 1.1.1. ng-if не существовало в AngularJS до версии 1.1.5. Поэтому вам нужно обновить версию AngularJS, чтобы использовать ng-if.

Во-вторых, sessionStorage может принимать только строковые значения. Поэтому, если вы хотите сохранить JS-объект в sessionStorage, вам нужно JSON.stringify() сохранить объект и использовать JSON.parse() при его извлечении.

Наконец, ваш условный блок всегда устанавливает $scope.basicMode в true:

if (sessionStorage.getItem("modePreview")) { // if modePreview is true
  $scope.basicMode = sessionStorage.getItem("modePreview"); // set basicMode to true
} else { // otherwise, still set basicMode to true?
  $scope.basicMode = true;
}

Я думаю, вы хотите, чтобы оператор else был $scope.basicMode = false, верно?

Обновленная рабочая рабочий пример: https://jsfiddle.net/zx02f1yv/

спс, обновил. Вы знаете, почему я не могу получить значение из хранилища сеансов в ng-if?

Arter 08.02.2019 14:37

Спасибо, не могу поверить, что предсказал это. Я делал это сотни раз с sessionStorage. я думаю, пришло время покинуть офис на этой неделе :D :D

Arter 08.02.2019 14:57

Не за что, рад помочь :)

JoshG 08.02.2019 14:58

Другие вопросы по теме