$ scope. $ watch en Angular no funciona en Ionic / Cordova

Estoy construyendo una aplicación utilizando el Marco Iónico para el que ahora quiero crear algunos interruptores de encendido y apagado (que son básicamente casillas de estilo sofisticado). Cuando una persona presiona el interruptor, quiero enviar esto al server, así que primero bash atrapar el evento de cambio de interruptor. En una installation angular básica, lo probé con una simple checkbox en el html ( <input type="checkbox" ng-model="theswitch"> ) y un $watch en mi controller, así:

 $scope.$watch('theswitch', function(){ console.log('theswitch changed'); if ($scope.boel){ console.log('theswitch is TRUE'); } else { console.log('theswitch IS FALSE'); } }); 

Esto funciona como un encanto. Ahora implementé algo similar en mi aplicación Ionic. Mi HTML es así:

 <ion-item class="item-toggle"> Mail <label class="toggle"> <input type="checkbox" ng-model="mail"> <div class="track"> <div class="handle"></div> </div> </label> </ion-item> 

y mi controller se ve así:

 myControllers.controller('AccountCtrl', function ($scope) { $scope.$watch('mail', function(){ console.log('THE MODEL CHANGED'); if ($scope.mail) { console.log('The button was turned ON.'); } else { console.log('The button was turned OFF.'); } }); }); 

Al cargar la pantalla, recibo dos loggings:

 THE MODEL CHANGED The button was turned OFF. 

Después de eso puedo activar el interruptor un millón de veces, pero ya no recibo posts de logging, ni siquiera un error. Dado que funciona perfectamente en mi website de testing angular, pero no en mi aplicación, estoy un poco perdido en lo que podría estar mal.

¿Alguien tiene alguna idea de lo que puedo hacer para atrapar este evento de cambio? ¡Todos los consejos son bienvenidos!

Posible motivo para no trabajar $scope.$watch podría ser la anulación de la propiedad en el scope del hijo. Si configura $watch en el scope del controller, pero la checkbox con el enlace ng-model se crea dentro de algún ámbito hijo del controller, el scope secundario podría crear su propia propiedad de mail y el controller $ scope. $ Watch no podrá detectar cambios en ese propiedad. Aquí está jsfiddle que demuestra este problema: enlace .

Para evitar este problema, no debe usar valores primitivos en el scope de enlaces de ng-model . En su lugar, debe vincularse a las properties de los objects en el ámbito, por ejemplo ng-model="formData.mail" donde formData es algún object en el scope del controller. Para observar los cambios en la propiedad de los objects, también utiliza la syntax de puntos: $scope.$watch('formData.mail', function(){...})

Espero que esto ayude.