从父级到子级的路径解析父级

时间:2017-03-06 13:35:37

标签: javascript angularjs angular-ui-router

我有这样的路线(使用ui-router):

    $stateProvider
        .state('studies', {
            url: '/studies?all&field&term&page&sort&sort_dir',
            templateUrl: 'scripts/studies/studies.template.html',
            controller: 'StudiesController',
            onExit: function exitStudies(filterQuery) {
                filterQuery.emptyQuery();
            },
            menuElement: 'studies',
            resolve: {
                attributes: function (manageAttributes, attributeDefinition, $q) {
                    console.log('resolve');
                    var promises = {
                        columnDefinitions: attributeDefinition.fillColumnsDefinitions(),
                        userColumns: manageAttributes.queryAttributes()
                    }
                    return $q.all(promises)
                        .then(function (response) {
                        var attributes = _.map(response.userColumns, function (object) {
                            return _.find(manageAttributes.getAllAttributes(), function (attribute) {
                                return attribute.name === object.name;
                            });
                        });
                        manageAttributes.setAttributes(attributes);
                    });
                }
            }
        });
        ['favorites-list', 'favorites-filter', 'default-filter'].forEach(function(directive) {
            $stateProvider.state('studies.' + directive, {
                template: '<' + directive + '></' + directive + '>'
            });
        });

当我使用以下方式导航到孩子时:

收藏夹

触发了解析控制台日志,我在子路由中没有url,因为我不希望在导航到子路由时更改url。

当我添加此代码时:

.run(function($rootScope, $state) {
    $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
        console.log('state: ' + fromState.name + ' -> ' + toState.name);
    });
});

我收到了这条消息:

resolve
state:  -> studies
resolve
state: studies -> studies.favorites-list

为什么在导航到子路由时触发了解决方案?

1 个答案:

答案 0 :(得分:1)

孩子们在ui-router中继承父母的决心。这是应该的方式。您可以重新排列代码,使其不是子状态。或者,可能(因为我没有尝试过这种方法),覆盖子状态中的resolve以返回null。