UI-Router $ state。$ current wrapper for any state

时间:2014-11-09 03:22:34

标签: angularjs angular-ui-router

这是用例。给定一个stateConfig对象,我可以访问state.url,但这只返回该配置对象中指定的URL,而不是包含状态父对象的URL的URL。我需要构建完整的URL以传递到$ urlMatcherFactory.compile,以测试匹配。

幸运的是,$state.$current提供了一个扩展状态对象,它允许我迭代遍历状态的父对象并构建完整的URL以进行匹配。不幸的是,$state.$current显然只包装当前状态,但如果我能以相同的方式包装任意状态,那将是很好的。有任何想法吗?

2 个答案:

答案 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()将返回包装状态配置对象。