AngularJS UI-Router父状态重新加载

时间:2016-08-04 07:56:50

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

我尝试使用左侧的消息列表创建某种收件箱应用,并使用UI-Router在右侧创建所选消息的详细信息。< / p>

我有父状态解析数据库中的消息列表,子状态解析数据库中的所选消息(参数中的id)。

问题是:当在消息之间导航时(子状态,juste 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});

还尝试添加参数&#34; reload:false&#34;在两个解决方案中(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;
                }]
            }
        })

2 个答案:

答案 0 :(得分:0)

试试这个:

<?php foreach ($data as $key=> $value):?>
<?php 
    switch ($value['type']){
        case 'heading':
                        echo "heading";
                        break;
        case 'text':
                        echo 'textfield';
                        break;
        default : //default code here
     }

?>
<?php endforeach;?>

$state.go('^. show', {id: id}); 表示父状态。

答案 1 :(得分:0)

哦,天啊......

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

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

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

对不起那个小姐......