Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS UI路由器从视图中获取当前状态_Angularjs_Angular Ui Router - Fatal编程技术网

AngularJS 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”的控制器

考虑从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”的控制器:

是否有任何内置功能可从控制器内或模板内确定控制器/模板关联的状态

例如:

.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);
});