2015-08-14 156 views
0

我嘗試使用ui-router來管理單個頁面應用程序上的嵌套視圖。角度ui路由器從url打開的嵌套狀態

比方說,我想創建一個公用區域和多個視圖的儀表板應用程序。

主要和嵌套狀態像這樣處理:

$stateProvider.state('home', { 
     url: '/', 
     template: 'MY HOME PAGE' 
    }) 
    .state('login', { 
     url: '/login', 
     templateUrl: '/pages/login.html' 
    }) 
    .state('registration', { 
     url: '/registration', 
     templateUrl: '/pages/registration.html' 
    }) 
    .state('dashboard', { 
     url: '/dashboard', 
     templateUrl: '/pages/dashboard/dashboard.html' 
    }) 
    .state('dashboard.me', { 
     url: '/me', 
     templateUrl: '/pages/dashboard/me.html' 
    }) 
    .state('dashboard.messages', { 
     url: '/messages', 
     templateUrl: '/pages/dashboard/messages.html' 
    }) 
    .state('dashboard.friends', { 
     url: '/friends', 
     templateUrl: '/pages/dashboard/friends.html' 
    }); 

儀表板HTML頁面如下:

<div class="container" ng-controller="dashboardCtrl" ng-init="init()"> 

<h2>DASHBOARD</h2> 
<ul> 
    <li><a ui-sref="dashboard.me">Me</a></li> 
    <li><a ui-sref="dashboard.messages">My Messages</a></li> 
    <li><a ui-sref="dashboard.friends">My Friends</a></li> 
</ul> 

<div ui-view></div> 

上述HTML還包括一個內部ui-view

如果我使用錨點導航我的應用程序,一切正常。 順便說一句,如果我嘗試直接去爲myhost /儀表板/我爲myhost /儀表板/朋友(與嵌套視圖兩級每一條路徑)的應用程序無法正常工作。我得到一個角度(意想不到的令牌<),但我認爲它不相關...

它似乎不能解決第一層的嵌套視圖。 下圖顯示了當導航使用錨完成獲得的HTML:When I navigate using anchors

和網頁時,從瀏覽器的地址鏈接直接調用獲得的HTML:

When I call directly the page from the browser

任何想法?謝謝。

+0

你可能在你的URL中缺少'#'。嘗試一下'host /#/ dashboard/me' – mbeso

回答

0

問題是角度不加載,因此錯誤。代碼看起來對我來說是正確的,除非你錯過了結束標籤

<div class="container" ng-controller="dashboardCtrl" ng-init="init()"> 

0

JavaScript的狀態設置:

$stateProvider.state('home', { 
     url: '/', 
     template: 'MY HOME PAGE' 
    }) 
    .state('login', { 
     url: '/login', 
     templateUrl: '/pages/login.html' 
    }) 
    .state('registration', { 
     url: '/registration', 
     templateUrl: '/pages/registration.html' 
    }) 
    .state('dashboard', { 
     url: '/dashboard', 
     abstract: true, 
     parent: 'home', 
     templateUrl: '/pages/dashboard/dashboard.html' 
    }) 
    .state('dashboard.me', { 
     url: '/me', 
     views: { 
      '@dashboard_view': { 
       templateUrl: '/pages/dashboard/me.html' 
      } 
     } 
    }) 
    .state('dashboard.messages', { 
     url: '/messages', 
     views: { 
      '@dashboard_view': { 
       templateUrl: '/pages/dashboard/messages.html' 
      } 
     } 
    }) 
    .state('dashboard.friends', { 
     url: '/friends', 
     views: { 
      '@dashboard_view': { 
       templateUrl: '/pages/dashboard/friends.html' 
      } 
     } 
    }); 

儀表盤HTML

<div class="container" ng-controller="dashboardCtrl" ng-init="init()"> 


<h2>DASHBOARD</h2> 
<ul> 
    <li><a ui-sref="dashboard.me">Me</a></li> 
    <li><a ui-sref="dashboard.messages">My Messages</a></li> 
    <li><a ui-sref="dashboard.friends">My Friends</a></li> 
</ul> 

<div ui-view="dashboard_view"></div> 

你可以得到更多的細節:

Multiple Named Views

Nested States and Nested Views

+0

感謝您的Mohan。 我不認爲它這樣工作。如果我將狀態***儀表板***設置爲抽象,則實際上不再可用。 這也是不可能達到*** /儀表板/我***既不使用錨點或網址。 – cq5beginner

+0

@ cq5beginner這是使用嵌套視圖的最佳實踐。如果我們在主模板的ui-view中渲染視圖,那麼就不會使用ui路由。如果你仍然有問題,我可以幫你解決這個問題,我可以爲你創建一個演示程序。我只是想讓你正確實施UI路線。 –

+0

這將是非常有用的一個小示範其實:)在此期間,我會嘗試調查更多 – cq5beginner