如何使用ui-router 1.0

时间:2017-03-22 03:18:13

标签: angularjs angular-ui-router

我正在构建一个名为breadcrumb的角度插件,它可以正常工作,直到我将ui-router版本更新为'1.0.0-beta.2'。原因是我无法从$ state。$ current获得解析数据。

in html

在html中为data.displayName指定显示名称属性 <breadcrumbs display-name-property="data.displayName"></breadcrumbs>

state config

displayName是动态的 .state('app.dict.list.tree', { ... data: { displayName: '{{title}}' }, resolve: { title: ['$transition$', $transition$ => $transition$.params().title], } })

指令链接功能

我使用$ interpolate服务来编译propertyReference(在本例中为'{{title}}'),其中包含上下文 $ state。$ current.locals.global var currentState = $state.$current; interpolationContext = (typeof currentState.locals !== 'undefined') ? currentState.locals.globals : currentState; displayName = $interpolate(propertyReference)(interpolationContext);

将ui-router更新到最新版本,此代码将不再起作用,currentState.locals未定义,我找不到在currentState对象中访问已解析数据的方法。

有人知道怎么做吗?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我发现$state.getCurrentPath()提供了pathNodes的列表,其中包含已解析的数据。

类似于Transition的treeChanges()。只有在转换发生时才可用

答案 1 :(得分:0)

if(legacyRouter){
                    scope.$on('$stateChangeSuccess', function() {
                        updateBreadcrumbsArray();
                    });
                }else{
                    $injector.get('$transitions').onSuccess({}, function(trans){
                        resolved(trans, updateBreadcrumbsArray)
                    })
                }

                /**
                 * get all resolved data in state declare and use them to compile display name
                 * */
                function resolved(trans, fn){
                    var tokens = trans.getResolveTokens();
                    var resolves = {};
                    var promises = tokens.map(function(token){
                        var resolved = trans.injector().get(token);
                        resolves[token] = resolved;
                        return resolved;
                    });
                    $q.all(promises).then(function(){
                        fn(resolves);
                    })
                }