这是用例。给定一个stateConfig对象,我可以访问state.url
,但这只返回该配置对象中指定的URL,而不是包含状态父对象的URL的URL。我需要构建完整的URL以传递到$ urlMatcherFactory.compile,以测试匹配。
幸运的是,$state.$current
提供了一个扩展状态对象,它允许我迭代遍历状态的父对象并构建完整的URL以进行匹配。不幸的是,$state.$current
显然只包装当前状态,但如果我能以相同的方式包装任意状态,那将是很好的。有任何想法吗?
答案 0 :(得分:2)
您可以使用.decorator
上的$stateProvider
挂钩公开内部状态实现。你可以装饰国家建设者的任何财产;我随意选择了“父母”。
app.config(function($stateProvider) {
$stateProvider.decorator('parent', function (internalStateObj, parentFn) {
// This fn is called by StateBuilder each time a state is registered
// The first arg is the internal state. Capture it and add an accessor to public state object.
internalStateObj.self.$$state = function() { return internalStateObj; };
// pass through to default .parent() function
return parentFn(internalStateObj);
});
});
现在,您可以使用.$$state()
,e.gg
var publicState = $state.get("foo");
var privateInternalState = publicState.$$state();
答案 1 :(得分:0)
知道了。
经过一些日志记录后,我意识到调用state.$$state()
将返回包装状态配置对象。