我必须根据条件导航页面,这里我从后端得到响应,当我尝试评估它时,它表现为连续循环但没有得到确切的结果。我到现在所做的是:
constructor (public homeauth: Authservice, public navCtrl: NavController) {
this.accesscheck();
}
accesscheck() {
this.homeauth.accesscheck().then(response => {
for (var i = 0; i < response.length; i++) {
if (response[i]["c20"] !== true) {
this.navCtrl.setRoot("TabsPage");
}
}
});
}
我的后端有这样的回复:
[
{
"c24": true,
"statuscode": 65544
},
{
"c23": true,
"statuscode": 4259848
},
{
"c22": true,
"statuscode": 6357000
},
{
"c21": true,
"statuscode": 7405576
},
{
"c20": true,
"statuscode": 7929864
},
{
"c19": true,
"statuscode": 8192008
},
{
"c18": true,
"statuscode": 8323080
}
]
答案 0 :(得分:1)
我认为问题在于你在一个甚至可能没有&#34; c20&#34;的对象中检查响应[i] [&#34; c20&#34;]!== true。属性。因此,您应首先检查响应[i]对象是否具有该属性。
此外,在您导航到所需的页面后,您应该break;
你的for循环:
accesscheck() {
this.homeauth.accesscheck().then(response => {
for (var i = 0; i < response.length; i++) {
if (response[i]["c20"] !== null) {
if (response[i]["c20"] !== true) {
this.navCtrl.setRoot("TabsPage");
break;
}
}
}
});
}
答案 1 :(得分:0)
你循环次数太多了。如果你有多个&#34;假&#34;在您的数据中声明,您将最终导航到tabspage不止一次。在遇到第一个false之后你应该中断,或者你应该设置一个类似&#34; navigatedToTabsPage&#34;的布尔值。最初设置为false,但在 if 语句中求值为true,从而终止循环(如果是,则必须嵌套另一个if语句)
答案 2 :(得分:0)
它的工作方式是这样的
findObjectByKey(array, key, value) {
for (var i = 0; i < array.length; i++) {
if (array[i][key] === value) {
return array[i];
}
}
return null;
}
accesscheck() {
this.homeauth.accesscheck().then(response => {
this.obj = this.findObjectByKey(response, 'c77', true);
if(this.obj){
console.log("success")
}else{
this.navCtrl.setRoot("TabsPage");
}
});
}
我在构造函数中传递了此accesscheck()。