【问题标题】:Angular UI Router controllers instantiated multiple times - Direct routeAngular UI Router 控制器多次实例化 - 直接路由
【发布时间】:2015-10-26 22:53:41
【问题描述】:

我设置了父/子路由,当我使用 state.go() 更改代码中的状态时,一切正常。当我尝试仅使用 URL 直接转到子路由时,就会出现问题。当我这样做时,控制器会被初始化多次。

这是我的 app.js

    $stateProvider
    .state('home', {
        url: "/",
        templateUrl: "Views/home.html",
        controller: 'HomeController',
        controllerAs: 'vm'
    })
    .state('ticketsMaster', {
        abstract: true,
        templateUrl: "Views/tickets-master.html",
        url: "^/performances?featureCode&theatreId",
        controller: 'TicketsMasterController',
        controllerAs: 'vm'
    })
    .state('ticketsMaster.performances', {
        url: "^/performances?featureCode&theatreId",
        templateUrl: "Views/performances.html",
        controller: 'PerformancesController',
        controllerAs: 'vm'
    })
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false
    });

home.html 是我的母版页,其中有我的 ui-view

我的 ticket-master.html 上还有另一个 ui-view,它会加载我的子视图(表演)。

当直接访问/performances?featureCode=1111&theatreId=1 时,它会加载我的TicketsMasterController 和 Performances 控制器 2 或 3 次。

任何帮助将不胜感激。

【问题讨论】:

  • 在两种不同的状态下将它们路由到"^/performances?featureCode&theatreId", 有什么意义?
  • 这是一个真正的问题,您是否必须在每个州声明一个 url 才能加载模板?
  • 这是一个很好的问题——我之所以把它放在那里是因为我只能从ticketsMaster状态中得到它。如果我只把它放在ticketsMaster.performances 状态,我根本看不到它们。我完全摆脱了master上的url,我仍然有同样的问题。

标签: javascript angularjs angular-ui-router url-routing


【解决方案1】:

我在这里找到了答案:

https://github.com/angular-ui/ui-router/issues/372

将此行添加到 app.config:

$locationProvider.html5Mode(true).hashPrefix('!')

并将这一行包含在 index.html 的头部:

<base href="/">

【讨论】:

    猜你喜欢
    • 2015-06-02
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2015-03-30
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多