这让我发疯了。我几乎认为这是一个错误。
当页面加载控制器时,它会检查window.localStorage值...如果没有设置它,则设置默认值。如果设置,则根据保存的值将复选框设置为true或false。但是即使在全新安装之后,我也会转到选项卡,看到复选框的console.log值为" false",但两个复选框都是CHECKED。
我从离子复选框开始,当我无法解决问题时,我转到标准复选框。但在这两种情况下,控制台消息都会显示" temp"如果为false,则将其分配给$ scope或getElementById(取决于我使用的是哪个),并且呈现的页面显示已选中的复选框。我甚至尝试将虚假改为""坚持"检查" - 虽然没有任何改变。
HTML
<ion-checkbox style="border:0px;float:right;padding-left:24px;padding-top:5px" ng-model="bikeItem.Avail" ng-checked="bikeItem.Avail" ng-change="bikes('Avail','checked',1)"></ion-checkbox>
<input type="checkbox" id="bikesAvail" checked="{{bikeItem.Avail}}" style="border:0px;float:right;padding-left:24px;padding-top:5px" ng-click="bikes('Avail','checked',0)"></input>
控制器:
$scope.bikeItem = [] ;
var bikeKeys = {Shub:"value",Ehub:"value",Avail:"checked",Spots:"checked"} ;
var x=0 ;
for (var keyObj in bikeKeys) {
var key = keyObj ;
var keyValue = bikeKeys[keyObj] ;
var temp = window.localStorage.getItem("bikes"+key) ;
if (temp == null || temp == "" || temp == "undefined") {
if (x < 2) {
temp = 3 ;
} else if (x > 1) {
temp = false ;
}
console.log("A Init: "+key + " :"+keyValue + ": " + temp) ;
$scope.bikeItem[key] = temp ;
window.localStorage.setItem("bikes"+key,temp) ;
document.getElementById("bikes"+key)[keyValue] = temp ;
console.log("B : "+document.getElementById("bikes"+key)[keyValue]) ;
} else {
console.log("C Init: "+key + " :"+keyValue + ": " + temp) ;
$scope.bikeItem[key] = temp ;
document.getElementById("bikes"+key)[keyValue] = temp ;
console.log("D : "+document.getElementById("bikes"+key)[keyValue]) ;
}
x++ ;
}
以上控制台消息打印: &#34; A Init:Avail:checked:false&#34; &#34; B:真&#34; ;
我的意思是,控制台消息B上方的两行表示值为FALSE并指定$ scope.bikeItem.Avail = false AND document.getElmentById(&#34; bikesAvail&#34;)。checked = false; - 但两种类型的复选框都被指定为真,并显示已检查。
当我离开页面并返回控制台消息C&amp; D fire(因为这些值现在存储在localStorage中)时,两者都显示temp = false,但仍然会检查复选框。
但是,正确的值正在被传递给正常值。第一次加载默认值为3,离开页面并返回它们是三个...用户将它们更改为任何内容,离开页面并返回并显示用户值。它只是两个复选框。