Когда я использую Ionic toggle с функцией on-change, он работает нормально.
<ion-toggle ng-model="pushNotification.checked"
ng-change="pushNotificationChange()">
После добавления ng-true-value и ng-false-value модель не изменяется или, по крайней мере, не находится в функции on-change. Однако он изменяется в пределах представления, отображая привязанное значение правильно.
<ion-toggle ng-model="emailNotification"
ng-true-value="'Subscribed'"
ng-false-value="'Unubscribed'"
ng-change="emailNotificationChange()">
В контроллере:
$scope.pushNotificationChange = function() {
console.log('Push Notification Change', $scope.pushNotification.checked);
};
$scope.emailNotificationChange = function() {
console.log('Email Notification Change', $scope.emailNotification);
};
Здесь код: https://codepen.io/anon/pen/jqjjZP
Push Notifications корректно переключает журналы на консоль, в то время как Newsletter toggle всегда регистрирует "Subscribed".
Зачем?
Это связано с тем, что 2-сторонняя привязка ng-model
выполняется только при привязке к объекту, который может быть обновлен посредством ссылки. В вашем случае ваш объект $scope.pushNotification
является объектом и поэтому работает корректно, а $scope.emailNotification
является примитивным значением и не работает. Измените его на объект, и он будет работать даже без обработчика изменений.
<ion-toggle toggle-class="toggle-assertive"
ng-model="emailNotification.value"
ng-true-value="'Subscribed'"
ng-false-value="'Unubscribed'">
Newsletter
</ion-toggle>
$scope.emailNotification = { value: 'Subscribed' };
Я создал разветвленный код из вашего кода, и он работает так, как ожидалось: https://codepen.io/addi90/pen/EKqaOG
Хорошо, я посмотрел на ваш код, и ваша ng-модель привязывается непосредственно к ng-true-value
и ng-false-value
. Поэтому при удалении $scope.emailNotification = 'Subscribed';
от контроллера кнопка все еще работает, но запись в wil говорит undefined.
Кнопка не будет иметь значения в начале, но получит ее, когда вы ее переключите.