我使用angularjs,当我使用在两个API中返回true
或false
的函数时,ng-if
有问题,浏览器冻结
self.isShow= function() {
service.getKioskLogByKioskId([stateParams.kioskId], function (data) {
self.kioskLog = data;
service.getKiosk([stateParams.kioskId], function (kiosk) {
self.kiosk = kiosk;
debugger
if (self.kioskLog.isConnected && self.kiosk.isActive)
return true;
else
return false;
});
});
}
和html
ng-if="self.isShow()"
ng-if
不能是异步的,它希望以同步的方式获得true/false
。
别忘了EVERYangular指令会创建一个"watch",它将作为angular脏检查机制的一部分被调用。如果你对它进行"繁重"的操作,它将阻塞浏览器。
基本上,您的代码中有两件错误的事情,第一件,您的isShow
根本没有返回布尔值,(它总是返回undefined(。第二个,您可能正在service.getKioskLogByKioskId
方法内部进行API调用。
为了解决这两个问题,您可以在控制器的构造函数内调用service.getKioskLogByKioskId
(如果它是一个组件,则有$onInit
生命周期挂钩(,然后将异步结果保存在控制器上,并在视图中使用它。
它应该看起来像这样:
class MyController {
constructor(stateParams) {
this.stateParams = stateParams;
this.isShow = false; // initial value
}
$onInit() {
const self =this;
service.getKiosk([stateParams.kioskId], function (kiosk) {
self.kiosk = kiosk;
debugger
if (self.kioskLog.isConnected && self.kiosk.isActive)
self.isShow = true;
else
self.isShow = false;
});
}
}
// view.html
<div ng-if="$ctrl.isShow"></div>