1

localStorage でいくつかの設定を保持しようとしてこの旅を始めましたが、いくつかの問題があり、それについてここに投稿しました (解決策なし):なぜこのデータがバインドされないのですか? Angularjs の奇妙なケース

ngStorage について学んだので、その方法を放棄しました。理論的には、ngStorage を使用すると、Angular モデルに双方向でバインドできます。それは素晴らしい、素晴らしい理論です。

私はそれで問題を抱えています。半分効きます。

アイデアは次のとおりです。

  1. 権限の選択をテストします (true または false)。
  2. 選択がない場合 (初めて使用する場合)、選択肢がポップアップ表示されます。
  3. 選択を保存します。
  4. 再起動時に、保存された選択肢を使用して、アクセス許可を true または false に設定します。
  5. ユーザーがアプリ内から権限を変更できるようにします。

4号まで活躍します。

テストによると、最初の使用時に $storage.analytics を true または false に設定できますが、その後の変更は保存され、ローカル ストレージから取得されません。

コードは次のとおりです。

permissionCallback = function(permission){  
  if(permission===1){
      console.log("analytics allowed");
      analytics.startTrackerWithId('UA-45544004-1'); 
      $scope.$storage.analytics=true;
      navigator.notification.alert('You can turn analytics off in the Data Tracking section at any time.', null, 'Analytics On', 'OK');
  }else{
      console.log("analytics denied");
      $scope.$storage.analytics=false;
      navigator.notification.alert('You can turn analytics on in the Data Tracking section at any time.',null , 'Analytics Off', 'OK');
  }
}

if(typeof $scope.$storage.analytics === 'undefined'){
  navigator.notification.confirm('This app would like your permission to collect data on how you use the app. No personal or user identifiable data will be collected.', permissionCallback, 'Attention', ['Allow','Deny']);
}
else{
  console.log('start analytics are', $scope.$storage.analytics); 
  if(typeof analytics !== 'undefined'){
    console.log("analytics functioning");
    analytics.startTrackerWithId('UA-45544004-1'); 

      $scope.trackClick = function(category, action){
        analytics.trackEvent(category, action); 
        console.log('Tracking category: ' + category + ', Section: ' + action + '.');
      }
  }
}
$scope.counter = 0;
$scope.change = function(){
  $scope.counter++;
  console.log('analytics are ' + $scope.$storage.analytics);
}

そして、これがhtmlです。

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

それは私の論理の誤りか、データの範囲に関する誤解である可能性が高いと思います。

奇妙なことに、change() 関数のコンソール ログ (純粋にこれらを追跡するためのもの) は常に正しいです。したがって、html で $storage.analytics を使用するのが正しい方法であり ($scope.storage.analytics を使用するとあらゆる種類のエラーが発生します)、実際には html から $scope.storage.analytics にバインドされます。

では、トグルを使用するときにローカル ストレージに保存しないのはなぜですか?

4

1 に答える 1