簡體   English   中英

具有多個視圖和控制器實例化的角度ui路由器狀態

[英]angular ui-router states with multiple views & controller instantiation

好的,我在angular和ui-router方面有相當豐富的經驗,但是在我的應用程序體系結構方面遇到了一個問題。 我有一些狀態,例如:

main.module.js

.state('main', {
    abstract: true,
    controller: 'MainCtrl',
    template: '<div ui-view />'
}).state('main.clients', {
    url: '/clients/:id',
    views: {
        list: {controller: 'ClientListCtrl', templateUrl: 'client-list.html'},
        detail: {controller: 'ClientDetailCtrl', templateUrl: 'client-detail.html'}
    }
}.state('main.services', {
    url: '/services/:id',
    views: {
        list: {...},
        detail: {...}
    }
}

main.html中

<div>
    <div ui-view='list'></div>
    <div ui-view='detail'></div>
</div>

客戶list.html

<ul>
    <li data-ng-click='$state.go('main.clients({id: client.id})' 
        data-ng-repeat='client in clients'>
        {{client.name}}
    </li>
</ul>

這一切似乎都可以正常工作,並且按我的期望填充了視圖。 我的主要問題是,當我處於main.clients狀態,並且用戶單擊客戶端名稱時,將觸發$state.go(...) ,即使狀態沒有發生,它$state.go(...)重新初始化ClientListCtrlClientDetailCtrl實際上並沒有改變(嗯,URL的:id部分做了)。

我在濫用多個視圖嗎? 更改體系結構是否明智? 只是想盡一切辦法以最有效的方式構造它,在這種情況下似乎不需要控制器重新初始化,但是我可能會丟失一些東西。 謝謝!

在99%的情況下,我們希望(或者我想說)重新加載狀態或其參數更改。 新的參數將意味着不同的列表/細節。

但是有一個設置:

reloadOnSearch

布爾值(默認為true) 如果為false,將不會僅由於搜索/查詢參數已更改而重新觸發相同的狀態。 當您想要修改$ location.search()而不觸發重新加載時很有用。

我在這里創建了一個示例,展示了如何在搜索時打開重載。

  • 狀態更改會觸發重新加載,
  • 參數變化不

片段:

  .state('index', {
      url: '/index/:area',
      ...
    })
    .state('index.detail', {
      url: '/detail/:id',
      reloadOnSearch : false,
      ...

可以說,即使使用解析器,默認行為也是我們需要的。 但是...在這里檢查動作的變化

暫無
暫無

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

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