AngularJS UI路由器从视图中获取当前状态
考虑从ui路由器文档中获取的以下状态:AngularJS UI路由器从视图中获取当前状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,考虑从ui路由器文档中获取的以下状态: .state('state1', { url: '/state1', templateUrl: 'partials/state1.html' controller: 'State1Ctrl' }) .state('state1.list', { url: '/list', templateUrl: 'partials/state1.list.html', }) 状态“state1”的“partials/state1.html”的控制器
.state('state1', {
url: '/state1',
templateUrl: 'partials/state1.html'
controller: 'State1Ctrl'
})
.state('state1.list', {
url: '/list',
templateUrl: 'partials/state1.list.html',
})
状态“state1”的“partials/state1.html”的控制器:
是否有任何内置功能可从控制器内或模板内确定控制器/模板关联的状态
例如:
.controller('State1Ctrl', function ($state) {
console.log($state.this); // state1
});
如果没有内置解决方案,您将如何“修饰”$state或$stateParams以包含此信息
我提出的唯一解决方案是使用$state.get(),然后使用控制器或模板值查找状态。这看起来非常混乱。您可以像这样访问当前状态配置对象:
$state.current
$state.current.name //Return the name of current state
有关更多信息,请查看。我们可以使用$state查看当前状态的定义。当前
,选中此项显示:
检查一下
扩展:上述示例将始终返回当前状态-即,如果存在三个状态的层次结构,并且我们直接访问最后一个状态('state1.list.detail'
):
elem.closest('[ui-view]').data('$uiView').state
快速讨论引用:
此外,用户可以附加自定义装饰器,这将在州的内部定义中生成新属性。除了访问内部状态(即,$state.$current
)之外,目前还没有明确的使用案例,但是,随着我们引入额外的元编程功能,这一点将变得越来越重要
但是:没有办法,如何从它所属的当前控制器
实例获取信息!即使是任何迭代,在一些$state.get('stateName')
中搜索也不可靠,因为根本不存在这样的关系。一个控制器类
可以作为不同的实例
用于多个视图。而且,根据我的经验,我不记得任何情况下,当我需要知道这样的信息。。。希望现在更清楚一点在任何地方都找不到这个文档,所以我查看了源代码
ui视图元素附加了一个名为$uiView的数据字段,它包含视图名称和关联状态。您可以获得如下状态:
$state.current
$state.current.name //Return the name of current state
甚至
$state.$current.name
如果您正在查找当前状态名称,$state.Current.name,则此选项非常有用。您可以按如下操作:
$state.is('contact.details.item');
不确定它是否为同一版本,但在0.3.1上,您可以使用它获取当前状态:
.controller('State1Ctrl', function ($state) {
console.log("Current State: ", $state.current.name);
});
并进行检查:
文件:
.$state如果要检查当前状态
console.log(“state”,$state.current)
如果要检查当前状态名称的名称
console.log(“statename”,$state.current.name)
从您的代码中选择一个正在工作的“开箱即用”控制器,它显示以下状态:
请参见下面对用户2992420的响应,如果可以,请用一个plunkr进行说明:)我很难在自己的控制器中实现这一点,谢谢!尝试为子状态指定它自己的控制器:。这是我遇到的问题事实上,没关系。在您的示例中,它也不起作用。一旦页面加载,请尝试直接导航到/state1/list。它将显示/list是两个控制器/模板中的“当前”状态。我以前意识到我的解释不准确。我还意识到你决定相信一些显而易见但事实上并不准确的答案。也许上面的分机会有帮助。请正确地理解我…我唯一的目标是帮助和提高我们对这一惊人工具ui路由器(我的意思是包括我在内)的理解良好的luckCurrent状态将显示$scope.current=='state1.list'在'State1Ctrl'内部,而不是$scope.current='state1'如果状态是'state1.list'$state.current始终是当前状态,而不是绑定到控制器的状态。在ionic1中,它实际上是$state.current.name
-但是,感谢您的帮助当您点击页面时,它是空白的哇,谢谢。在我看来,文档非常零碎和不完整,对于这样一个广泛使用的工具来说很奇怪。令人敬畏的事物看起来不像是棱角分明的。您正试图直接访问dom元素。这是jQuery方式。@RahulPrasad你是对的。这不是棱角分明的方式。但这是唯一的方法:)在ui路由器1.0+中,情况发生了一些变化。这对我很有用:elem.inheritedData(“$uiView”)。$cfg.viewDecl.$context
。状态数据也可以在$cfg.path
中找到,这是ui sref在创建链接时使用的。请参见stateContext
功能:
$state.current.name //Return the name of current state
$state.$current.name
$state.is('contact.details.item');
.controller('State1Ctrl', function ($state) {
console.log("Current State: ", $state.current.name);
});