Angularjs ui路由器解析在Ionic中的行为异常
我从一个演示的Ionic应用程序(Angularjs ui路由器解析在Ionic中的行为异常,angularjs,ionic-framework,angular-ui-router,Angularjs,Ionic Framework,Angular Ui Router,我从一个演示的Ionic应用程序(Ionic开始我的应用程序侧菜单))开始: 我监视器被拒绝解决s此处: .run(function($ionicPlatform, $rootScope, $ionicLoading) { $ionicPlatform.ready(function() { // regular stuff here $rootScope.$on('$stateChangeError', function() { $ionicLoading.sh
Ionic开始我的应用程序侧菜单)
)开始:
我监视器被拒绝解决
s此处:
.run(function($ionicPlatform, $rootScope, $ionicLoading) {
$ionicPlatform.ready(function() {
// regular stuff here
$rootScope.$on('$stateChangeError', function() {
$ionicLoading.show({
template: 'All good!'
});
});
});
});
出于某种原因,如果resolve
立即拒绝(请参阅上文defer.reject()
),则不会运行$stateChangeError
的回调。如果我也这么做,但在爱奥尼亚之外
此外,尝试通过执行$timeout(defer.reject)来延迟解决拒绝代码>会导致不同的行为。现在它可以在浏览器中正常工作,但在设备上仍然不能工作。尝试进一步延迟会导致在设备上成功:
$timeout(function() {
defer.reject();
}, 250); // Doesn't work for me with 200 or less
有人能解释一下吗
1)$超时需要大于200
首先-我从未见过像$timeout(deferred.reject)这样的构造;我不相信defered.reject会返回$timeout所期望的任何函数
我试了50次,效果很好。
这是
超时50或更少,但工作正常,即一切正常!是印刷的
resolve: {
test: function($q, $timeout) {
var defer = $q.defer();
$timeout(function(){
defer.reject();
},50);
return defer.promise;
}
}
这与iconicPlatform.ready之外的stateChangeError有关
2)$stateChangeError不工作
我认为这与时间有关。我不知道;我不知道ionicPlatform.ready()何时执行的内部结构,但我不确定是否有必要。您的starter
模块依赖于它,因此它将被加载。有时候,种子项目不仅仅是“种子”
已更新-在其他设备上发现有关ready()的错误。似乎ready方法没有得到执行
根据我对Angular和promise模型的经验。为了解决/拒绝承诺,Angular必须在JS事件循环的一个周期内打勾-nextTick-这可以通过使用$scope.apply()来完成,这就是我们在单元测试中模拟这些事情的方式
这是一个很棒的关于$timeout和$scope的讨论。$evalAsync-从我收集到的$timeout将在下一节中评估函数。这就是为什么此代码按照您概述的方式工作
resolve: {
issue: function($q, $timeout) {
var defer = $q.defer();
//defer.reject(); // <---- no nextTick
$timeout(defer.reject); // <---- $timeout evaluates on nextTick
return defer.promise;
}
}
解析:{
问题:函数($q,$timeout){
var defer=$q.defer();
//拒绝;//嗨,米莎。我刚刚克隆了你的Github repo并运行了命令:ionic run--device android,ionic加载模式正常运行。你是在android还是ios设备上尝试此操作?你使用的是特定设备吗?如果使用模拟器会发生这种情况吗?发现一个bug更新了我的答案accordingly@bhantol谢谢你,这帮了我的忙把我吓跑了!
resolve: {
issue: function($q, $timeout) {
var defer = $q.defer();
//defer.reject(); // <---- no nextTick
$timeout(defer.reject); // <---- $timeout evaluates on nextTick
return defer.promise;
}
}