$ state.go超时后或$ ionicPlatform.ready使布尔似乎同时真实而虚假

时间:2016-02-05 18:00:54

标签: angularjs ionic-framework angular-ui-router

我们希望在我们的应用程序中根据某些因素设置动态启动状态(如果您对上下文感兴趣,请向下滚动)。

我们有以下代码来实现它:我们有一个假的routing状态,这是一个没有UI的默认状态,它决定了路由。

mainModule.config(function($stateProvider, $urlRouterProvider) {
   // ...
   $stateProvider.state({
      'routing': {
        url: '/routing',
        controller: 'RoutingController'
      }
    });
    $urlRouterProvider.otherwise('/routing');
});

mainModule.controller('RoutingController', function($state, $ionicPlatform, $timeout) {
    function doNormalStartup() {
        console.log("doNormalStartup");
        $state.go('timeline');
    }

    doNormalStartup(); // fine
    // $ionicPlatform.ready(doNormalStartup); // double ng-hide bug!
    // $timeout(0).then(doNormalStartup); // bug as well
});

为简单起见,我在这个例子中说它总是应该路由到timeline状态。当我直接在RoutingController中进行状态导航时,它工作正常,但是当我在$ionicPlatform.ready回调中执行时,它会产生一个奇怪的错误:

我们有两个HTML节点,ng-show绑定到同一个变量,但有一个被否定了。因此,在任何时候,都应该显示其中一个。但是,angular会将ng-hide添加到两个节点!

只有在$ionicPlatform.ready内或在超时后触发导航时才会出现此错误。

enter image description here

似乎角度装订机械在某些时候被破坏了。 任何想法怎么可能发生这种情况?

上下文

如果Android应用是通过网络上的深层链接启动的 - 即应用程序拦截的HTTP链接,我们希望阅读原始请求网址并决定路由。

为此,我使用webintent plugin。但是我只能在插件初始化时读取它的输出,即在$ionicPlatform.ready回调内。

修改

我尝试将绑定表达式从showEmptyTimeline更改为foo.showEmptyTimeline以及稍后showEmptyTimeline()方法调用,在调用I console.log内容中,它们是布尔值false

将回调从doNormalStartup更改为function(){doNormalStartup()}并不会改变任何内容。

2 个答案:

答案 0 :(得分:0)

尝试使用

//p.add(new JLabel(ico));
JLabel label = new JLabel(ico);
label.setSize( label.getPreferredSize());
label.setLocation(...);
p.add(label);

代替你的代码

答案 1 :(得分:0)

角度1.4.x中的问题似乎是this angular bug。使用ng-if代替ng-show可以解决问题。