Почему эти данные не связываются? Странный случай в 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);