具有ng-true-value的离子切换不会更改控制器内的模型

时间:2016-05-21 10:55:35

标签: angularjs ionic-framework

当我使用Ionic切换功能时,它可以正常工作。

<ion-toggle ng-model="pushNotification.checked"
     ng-change="pushNotificationChange()">

添加ng-true-value和ng-false-value后,模型不会更改,或者至少不会在更改功能中更改。但它在视图中更改,正确显示绑定值。

<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

推送通知将日志正确切换到控制台,而时事通讯切换始终日志'已订阅'。

为什么?

2 个答案:

答案 0 :(得分:3)

这是因为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' };

我已经从您的代码中创建了一个forked codepen,它按预期工作:https://codepen.io/addi90/pen/EKqaOG

答案 1 :(得分:0)

我看了你的代码,你的ng-model直接绑定到ng-true-valueng-false-value。因此,当从控制器中删除$scope.emailNotification = 'Subscribed';时,按钮仍可正常工作,但日志记录将显示未定义。

按钮在开始时没有任何值,但在切换时会得到它。