【问题标题】:ui-router child state's view not showingui-router 子状态视图未显示
【发布时间】:2015-09-16 08:28:33
【问题描述】:

我正在开发一个用于子状态的应用程序。制作子状态的目的是

  1. 继承决心
  2. 继承url base

当我导航到子状态时,父状态的视图和控制器被初始化。子控制器根本没有初始化,视图根本没有显示。我认为奇怪的一件事是子视图实际上是通过 XHR 加载的,但它似乎从未出现过。

如何使子状态的视图出现,并且子状态的控制器使用父状态的解析进行初始化?

.state('restaurant', {
    url: "/{city:[a-zA-ZåäöÅÖÄ]{2,}}/{restaurantUrl:[a-zA_ZåäöÅÄÖ\-]{2,}}",
    views: {
        "main": {
            templateUrl: "/views/restaurant.html",
            controller: "RestaurantCtrl",
            resolve: {
                restaurant: function($q, $stateParams, RestaurantsSrvc) {
                    /*Some stuff going on that returns a promise*/
                }
            }
        }
    }
})
.state('restaurant.checkout', {
    url: "/checkout",
    views: {
        "main": {
            templateUrl: "/views/checkout.html",
            controller: "CheckoutCtrl"
        }
    }
})

【问题讨论】:

  • 您是否将命名视图 <div ui-view="main"></div> 添加到 restaurant.html 中?
  • 不,ui-view="main" 应用于驻留在我的 index.html 文件中的元素,所有模板都加载到该文件中

标签: angularjs angular-ui-router


【解决方案1】:

<div ui-view="main"></div> 添加到restaurant.html。在父模板之外填充ui-view 元素显然是不可能的。

还要确保每个带有子状态的模板有一个ui-view。当您只有一个地方可以插入子模板时,不要使用命名视图,它们适用于需要同时显示多个子视图的情况。 documentation 中的草图很好地说明了这个用例。

另请注意,默认情况下,当子状态处于活动状态时会显示父视图,因为子状态的 ui-view 在父模板中。如果您需要隐藏父内容(或只是其中的一部分),请使用ng-hide$state 服务,如this answer 所示。

【讨论】:

  • 这似乎不起作用:/ 必须有一种方式来说明 ui-view="main" 应该显示什么视图,即使它是子状态?
  • 不,这不是它的工作方式。这个想法是您在每个具有子状态的模板中创建一个专用的ui-view。如果您需要多个独立的孩子,您可以使用命名视图(否则您不需要它们)。
猜你喜欢
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多