Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $scope.$watch in';t在爱奥尼亚/科尔多瓦工作_Javascript_Angularjs_Cordova_Ionic Framework - Fatal编程技术网

Javascript $scope.$watch in';t在爱奥尼亚/科尔多瓦工作

Javascript $scope.$watch in';t在爱奥尼亚/科尔多瓦工作,javascript,angularjs,cordova,ionic-framework,Javascript,Angularjs,Cordova,Ionic Framework,我正在使用构建一个应用程序,现在我想为它创建一些开关(基本上是花式的复选框)。当一个人翻转开关时,我想将其发送到服务器,因此我首先尝试捕捉开关更改事件。在一个基本的angular安装中,我在html()中使用了一个简单的复选框,在控制器中使用了一个$watch,如下所示: $scope.$watch('theswitch', function(){ console.log('theswitch changed'); if ($scope.boel){ consol

我正在使用构建一个应用程序,现在我想为它创建一些开关(基本上是花式的复选框)。当一个人翻转开关时,我想将其发送到服务器,因此我首先尝试捕捉开关更改事件。在一个基本的angular安装中,我在html(
)中使用了一个简单的复选框,在控制器中使用了一个
$watch
,如下所示:

$scope.$watch('theswitch', function(){
    console.log('theswitch changed');
    if ($scope.boel){
        console.log('theswitch is TRUE');
    } else {
        console.log('theswitch IS FALSE');
    }
});
这很有魅力。我现在在我的Ionic应用程序中实现了一个类似的东西。我的HTML如下所示:

<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>
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.');
        }
    });
});
加载屏幕后,我得到两个日志:

THE MODEL CHANGED
The button was turned OFF.
在那之后,我可以翻转开关一百万次,但我再也没有收到任何日志消息,甚至没有错误。因为它在我的测角网站上运行得很好,但在我的应用程序中却不行,所以我有点迷失在可能出错的地方


有谁知道我能做些什么来赶上这次转换活动吗?欢迎所有提示

不工作的可能原因
$scope.$watch
可能是子作用域中的属性重写。如果在控制器作用域上设置了
$watch
,但在控制器的某些子作用域内创建了带有
ng model
绑定的复选框,则子作用域可能会创建自己的
mail
属性和控制器$scope。$watch将无法检测该属性中的更改。下面是演示此问题的JSFIDLE:

为了避免这个问题,您不应该在
ng model
绑定的作用域上使用原语值。相反,您应该绑定到作用域上对象的属性,例如
ng model=“formData.mail”
,其中
formData
是控制器作用域中的某个对象。要监视对象属性的更改,还可以使用点语法:
$scope.$watch('formData.mail',function(){…})


希望这能有所帮助。

你试过
$rootScope.$watch
而不是
$scope.$watch
?@DawsonLoudon-试过了,但也没用。还有其他建议吗这很有魅力。万分感谢!我也花了一些努力来理解这一点。感谢您不仅提供了解决方案,还解释了它的工作原理…-)我也遇到过这种情况,我想知道为什么使用离子框架会发生这种情况,我以前没有遇到过使用angular的情况。