簡體   English   中英

AngularJs UI路由器子視圖消失

[英]AngularJs ui-router child view disappear

這是一個小插曲https://plnkr.co/edit/CrLukiNbYRL8AreLS2rt?p=preview

請單擊A,然后在出現B和C之后 ,再次單擊A。 C將消失。

我有一條路線:

A-摘要,它具有2個命名視圖A-1,A-2和一個主菜單。 B-是位於A-1 @ A視圖中的子菜單C-是與B菜單相關的內容,它位於A-2 @ A視圖中

路線A的主菜單具有ui-sref到路線B。

B路由控制器有邏輯:

if($state.is('B')) {
    $state.go('C', {defaultContentId});
}

因此,當我單擊主菜單元素時,它將打開具有默認內容的B。 沒關系,沒問題。 但是,如果我在主菜單中單擊相同的元素,則將選擇我的默認子菜單,並且我的內容為空。 B控制器中的任何斷點均不會觸發。

解決方法(不回答)

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
    if(!$state.is(toState.name, toParams) && $state.includes(toState.name, toParams)){
        event.preventDefault();
        console.warn('Same state prevented');
    }
});

我只有2層導航,因此可以檢查父級是否單擊並防止單擊。 不是解決方案,只是一個魚腥的補丁...

所以。 在我的示例中,我只有A根,但在實際示例中,我有...讓我們假設-A1,A2,A3等。因此,現在有了這種解決方法,我可以單擊A1,但是如果加載了B,然后單擊A1,它將將被阻止。 我仍然可以從A1-> B層自由過渡到A2和A3。

由於ABC是AB的子狀態,因此不會重新執行AB的控制器,因此從ABC到AB不會更改狀態樹中的第二級。

這是關於ui-router的很酷的事情,它使狀態保持加載並提供僅重新加載ui的某些部分的能力。

如果要在導航狀態時實際重新執行,則可以使用ui-sref-opts屬性指定完全重新加載:

<menuItem ui-sref="A.B" ui-sref-opts="{reload: true}" class="btn btn--main">A - Click-me</menuItem>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM