Почему эти данные не связываются? Странный случай в Angularjs

Вот контроллер:

.controller('DataCtrl', function($ionicPlatform, $scope, $rootScope) {

    $ionicPlatform.ready(function(){
        $scope.analyticsOn = localStorage.analytics; 
        console.log('analytics are', $scope.analyticsOn);

        $scope.counter = 0;
        $scope.change = function(){
            $scope.counter++;
            console.log('analytics are ' + $scope.analyticsOn);
            localStorage.analytics = $scope.analyticsOn; 
        }
    })
});

И вот HTML:

<li class="item item-toggle">
   <i class="icon ion-cloud"></i> Data Tracking is {{analyticsOn}} {{counter}}
      <label class="toggle toggle-balanced">
         <input type="checkbox" ng-model="analyticsOn" ng-change="change()">
          <div class="track">
             <div class="handle"></div>
          </div>
       </label>
    </li>

При нажатии на переключатель появляется консольное сообщение "аналитика не определена", несмотря ни на что.

Тем не менее, и вот в чем дело, в приложении {{analyticsOn}} обновляется и переключается с true на false, а {{counter}} отсчитывает от начального значения, равного нулю.

Итак, я знаю, что -

  • а. Двухстороннее связывание данных работает, или счетчик не будет работать.
  • б. аналитика на меняется.

Так почему консольные журналы не показывают это? План состоит в том, чтобы вернуть значение обратно в localStorage.analytics для сохранения данных, но я впервые использую ng-change. Если бы я сделал это в чистом JavaScript, было бы хорошо.

Кто-нибудь?

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

Это само подняло его собственные проблемы, о которых я буду задавать вопросы в другом месте.

2 ответа

Можно было бы обновить как localStorage & $scope переменной вместе, храня весь localStorage в одной переменной области видоизменения, сделав это изменение, вы можете избавиться от ng-change директива тоже.

наценка

<input type="checkbox" ng-model="localStorage.analyticsOn" ng-change="change()">

Код

.controller('DataCtrl', function($ionicPlatform, $scope, $rootScope) {

    $ionicPlatform.ready(function(){
        $scope.localStorage= localStorage; 
        console.log('analytics are', $scope.localStorage.analyticsOn);

        $scope.counter = 0;
        $scope.change = function(){
            $scope.counter++;
            console.log('analytics are ' + $scope.localStorage.analyticsOn);
        }
    })
});

Первая строка console.log неверна

console.log('analytics are', $scope.analyticsOn);

должно ли это быть console.log('analytics are' + $scope.analyticsOn);

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