Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ui路由器解析在Ionic中的行为异常_Angularjs_Ionic Framework_Angular Ui Router - Fatal编程技术网

Angularjs ui路由器解析在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应用程序(
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;
  }
}