2016-02-05 71 views
0

我們希望有一個動態的啓動狀態在我們的應用程序取決於某些因素(向下滾動,如果你是對上下文感興趣)。

我們有以下代碼來實現它:我們有一個虛假的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回調做到這一點,它會產生一個奇怪的錯誤:

我們有ng-show綁定到相同的變量兩個HTML節點,而是一個否定。所以在任何時候,都應該顯示其中的一個。然而,角向兩個節點添加ng-hide

該錯誤只發生在$ionicPlatform.ready內部或超時後導航。

enter image description here

好像角裝訂機械被在某些時候打破。 任何想法如何可能發生?

語境:

如果Android應用程序是通過從網站深層鏈接開始 - 即HTTP鏈接通過一個應用程序截獲,我們要讀取原始的請求URL,然後決定路由。我想用webintent plugin。但是我只能在插件初始化時讀取它的輸出,即在$ionicPlatform.ready回調中。

編輯:

我試圖改變綁定表達式從showEmptyTimelinefoo.showEmptyTimeline後來showEmptyTimeline()的方法調用,調用裏面我console.log的內容,他們是一個布爾false

doNormalStartup的回調更改爲function(){doNormalStartup()}不會改變任何內容。

+0

嘗試console.log()showEmptyTimeline的時候你需要它。什麼是價值?也許它是不確定的! – cdslijngard

+0

我認爲這可以鏈接到https://github.com/angular/angular.js/issues/13380我需要調查更多一點 –

回答

0

的問題,請嘗試似乎是在角1.4所支持this angular bug使用ng-if而不是ng-show解決了這個問題。

0

使用

$ionicPlatform.ready(function() { 
    doNormalStartup(); 
} 

,而不是你的代碼