我正在构建一个名为breadcrumb的角度插件,它可以正常工作,直到我将ui-router版本更新为'1.0.0-beta.2'。原因是我无法从$ state。$ current获得解析数据。
在html中为data.displayName指定显示名称属性
<breadcrumbs display-name-property="data.displayName"></breadcrumbs>
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对象中访问已解析数据的方法。
有人知道怎么做吗?任何帮助将不胜感激。
答案 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);
})
}