localStorage でいくつかの設定を保持しようとしてこの旅を始めましたが、いくつかの問題があり、それについてここに投稿しました (解決策なし):なぜこのデータがバインドされないのですか? Angularjs の奇妙なケース
ngStorage について学んだので、その方法を放棄しました。理論的には、ngStorage を使用すると、Angular モデルに双方向でバインドできます。それは素晴らしい、素晴らしい理論です。
私はそれで問題を抱えています。半分効きます。
アイデアは次のとおりです。
- 権限の選択をテストします (true または false)。
- 選択がない場合 (初めて使用する場合)、選択肢がポップアップ表示されます。
- 選択を保存します。
- 再起動時に、保存された選択肢を使用して、アクセス許可を true または false に設定します。
- ユーザーがアプリ内から権限を変更できるようにします。
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 にバインドされます。
では、トグルを使用するときにローカル ストレージに保存しないのはなぜですか?