我有这个代码用于我的$stateProvider
.state('app.parent', {
url: '/app/:idParent',
controller : "ParentController",
resolve: {
idParent : function($stateParams){
return $stateParams.idParent
}
}
})
.state('app.parent.child', {
url: '/:idChild',
resolve: {
idChild : function($stateParams){
return $stateParams.idChild;
}
}
})
在父视图中,我有一个树视图,在子视图中,我有关于在父树视图中选择的节点的信息。节点的 id 为 $stateParams.idChild
显示我使用的选定节点
ng-class="{'bg-gray' : parentCtrl.idSelected == node.id}"
我想根据路径 idChild 选择父节点中的一个节点:
通过单击
- 我在父控制器中创建了一个单击功能来设置
parentCtrl.idSelect = node.id
- 并使用
$state.go()
- 所以它奏效了
- 我在父控制器中创建了一个单击功能来设置
通过刷新
- 因此,当它进入路径
/app/1/2
的状态时,它会选择id 为 2 的节点。 - 如何?
- 因此,当它进入路径
好吧,我找到了一个解决方案...我只是不知道是否是一个好的...
我在子控制器中创建了一个激活函数并调用
function ChildController($scope, idChild) {
activate();
function activate(){
$scope.parentCtrl.idSelected = idChild;
}
}
有没有办法不使用$scope?使用子控制器来修改父控制器的状态似乎是错误的。右?
如果您所需要的只是突出显示父状态下的活动项目,那么您可以使用这样的ui-sref-active
<!-- This <li> will only add the 'bg-gray' class if 'app.parent.child' or its descendants are active
AND if it is the link for the active child (aka idChild) -->
<li ng-repeat="node in nodes" ui-sref-active="bg-gray">
<!-- Here's a ui-sref that is also providing necessary parameters -->
<a ui-sref="app.parent.child({idChild:node.id})">{{node.name}}</a>
</li>
在这种情况下,您根本不需要点击处理程序。激活子状态后,将立即添加该类。
我还建议您检查这个官方的ui路由器示例应用程序及其来源。它包含许多有用的技巧。