【问题标题】:AngularJS UI-Router parent state reloadedAngularJS UI-Router父状态重新加载
【发布时间】:2016-12-10 05:43:24
【问题描述】:

我正在尝试创建某种收件箱应用,左侧是消息列表,右侧是所选消息的详细信息,使用 UI-Router 来执行此操作。

我有一个从数据库解析消息列表的父状态,以及一个从数据库解析选定消息的子状态(参数中的id)。

问题是:在消息之间导航时(子状态,只是 id 参数更改),父状态也被重新加载(视图,控制器......和消息列表)。我不想要,也不明白为什么会这样。

导航 - 尝试第一个解决方案(重新加载父级)

<a ui-sref="app.messengers.show({id: row.id})"></a>

导航 - 尝试了第二个解决方案(重新加载父级)

// Solution 2.1
$state.go('app.messengers.show', {id: id});
// Solution 2.2
$state.transitionTo('app.messengers.show', {id: id});

还尝试在两个解决方案中添加参数“reload: false”(ui-sref-opts 用于第一个解决方案,第三个参数用于第二个解决方案):父重新加载。

UI-路由器

        .state('app.messengers', { // parent state
            abstract: true,            
            url: '/messenger',
            templateUrl: 'app/messengers/list.html',
            controller: 'MessengersController',
            resolve: {
                load: ['$ocLazyLoad', function ($ocLazyLoad) {
                    return $ocLazyLoad.load([
                        'app/messengers/messengerService.js',
                        'app/messengers/messengersController.js'
                    ]);
                }],
                messages: ['load', 'MessengerService', function (load, MessengerService) {
                    return MessengerService.list();
                }]
            }
        })
        .state('app.messengers.show', { // child state
            url: '/:id',
            templateUrl: 'app/messengers/detail.html',
            controller: 'MessengerDetailController',
            params: {
                id: null
            },
            resolve: {
                load1: ['$ocLazyLoad', function ($ocLazyLoad) {
                    return $ocLazyLoad.load([
                        'app/messengers/messengerDetailController.js'
                    ]);
                }],
                message: ['load', '$stateParams', 'MessengerService', function (load, $stateParams, MessengerService) {
                    var regexp = new RegExp('^\\d+$');
                    return (regexp.test($stateParams.id)) ? MessengerService.get($stateParams.id) : null;
                }]
            }
        })

【问题讨论】:

    标签: angularjs angular-ui-router parent-child reload


    【解决方案1】:

    试试这个:

    $state.go('^. show', {id: id});
    

    ^ 表示父状态。

    【讨论】:

      【解决方案2】:

      天哪……

      我忘记了我在 $stateChangeStart(身份验证目的)中进行了一些检查...如果一切正常:

      $state.go(next.name, params, {reload: true});
      

      我已将 reload 参数更改为 next.name。 它有效。

      对不起,错过了……

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-08
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        相关资源
        最近更新 更多