ngChecked 似乎不想绑定到模型。为什么?
ngChecked doesn't seem to want to bind to the model. Why?
我正在使用 Ionic,因此 angularjs,我正在尝试将设置存储在 localStorage 中。
我有一个复选框,我想用它来打开或关闭分析。 html 看起来像这样。
Analytics on/off
<label class="toggle toggle-balanced">
<input type="checkbox" ng-click="toggleAnalytics()" ng-checked="analytics">
<div class="track">
<div class="handle"></div>
</div>
</label>
在相关控制器中我有:
$scope.analytics = $localstorage.get('analyticsOnOff');
$log.log("Analytics initialised at", $scope.analytics);
$scope.toggleAnalytics = function(){
if($scope.analytics===true){
$scope.analytics = false;
$localstorage.set('analyticsOnOff', false);
}else{
$scope.analytics = true;
$localstorage.set('analyticsOnOff', true);
}
$log.log("Analytics is ", $scope.analytics);
}
正如您所见,当您更改复选框时,toggleAnalytics() 函数会在 true 和 false 之间切换 $scope.analytics 并更新本地存储以反映这一点。
请注意,我使用的是 $localstorage 方法。 $localstorage 在另一个服务中定义。它允许您轻松设置和获取 localStorage 对象。
无论如何,我的问题是一个非常简单但令人费解的问题。我知道我可以从控制台日志中更改分析值,但无论我做什么,复选框都会初始化为打开状态。
有什么想法吗?
您应该在复选框上使用 ng-model
,这将处理设置实际的 属性 - 然后您可以使用 change
事件:
<input type="checkbox" ng-change="toggleAnalytics(analytics)" ng-model="analytics" />
控制器:
$scope.toggleAnalytics = function(isChecked) {
$localstorage.set('analyticsOnOff', isChecked);
$log.log("Analytics is ", isChecked);
}
非常感谢大家的反馈。
@nickgraef 让我解决了真正的问题 - .get() returns 一个字符串。
@tymeJV 为我提供了一个更优雅的我自己的代码版本。
这就是我最后所做的,它是两个技巧的混合体。在我从 localstorage .get() 之后,我将分析变量直接转换为布尔值。
$scope.analytics = $localstorage.get('analyticsOnOff');
$scope.analytics = ($scope.analytics == 'true' ? true : false);
$log.log("Analytics initialised at", $scope.analytics);
$scope.toggleAnalytics = function(isChecked) {
$localstorage.set('analyticsOnOff', isChecked);
$log.log("Analytics is ", isChecked);
}
我正在使用 Ionic,因此 angularjs,我正在尝试将设置存储在 localStorage 中。
我有一个复选框,我想用它来打开或关闭分析。 html 看起来像这样。
Analytics on/off
<label class="toggle toggle-balanced">
<input type="checkbox" ng-click="toggleAnalytics()" ng-checked="analytics">
<div class="track">
<div class="handle"></div>
</div>
</label>
在相关控制器中我有:
$scope.analytics = $localstorage.get('analyticsOnOff');
$log.log("Analytics initialised at", $scope.analytics);
$scope.toggleAnalytics = function(){
if($scope.analytics===true){
$scope.analytics = false;
$localstorage.set('analyticsOnOff', false);
}else{
$scope.analytics = true;
$localstorage.set('analyticsOnOff', true);
}
$log.log("Analytics is ", $scope.analytics);
}
正如您所见,当您更改复选框时,toggleAnalytics() 函数会在 true 和 false 之间切换 $scope.analytics 并更新本地存储以反映这一点。
请注意,我使用的是 $localstorage 方法。 $localstorage 在另一个服务中定义。它允许您轻松设置和获取 localStorage 对象。
无论如何,我的问题是一个非常简单但令人费解的问题。我知道我可以从控制台日志中更改分析值,但无论我做什么,复选框都会初始化为打开状态。
有什么想法吗?
您应该在复选框上使用 ng-model
,这将处理设置实际的 属性 - 然后您可以使用 change
事件:
<input type="checkbox" ng-change="toggleAnalytics(analytics)" ng-model="analytics" />
控制器:
$scope.toggleAnalytics = function(isChecked) {
$localstorage.set('analyticsOnOff', isChecked);
$log.log("Analytics is ", isChecked);
}
非常感谢大家的反馈。
@nickgraef 让我解决了真正的问题 - .get() returns 一个字符串。
@tymeJV 为我提供了一个更优雅的我自己的代码版本。
这就是我最后所做的,它是两个技巧的混合体。在我从 localstorage .get() 之后,我将分析变量直接转换为布尔值。
$scope.analytics = $localstorage.get('analyticsOnOff');
$scope.analytics = ($scope.analytics == 'true' ? true : false);
$log.log("Analytics initialised at", $scope.analytics);
$scope.toggleAnalytics = function(isChecked) {
$localstorage.set('analyticsOnOff', isChecked);
$log.log("Analytics is ", isChecked);
}