Angularjs 角度UI路由器嵌套选项卡,切换并切换回我们离开的位置

Angularjs 角度UI路由器嵌套选项卡,切换并切换回我们离开的位置,angularjs,angular-ui-router,Angularjs,Angular Ui Router,请看 单击“左” 单击“链接2”将其展开 单击“右键” 单击“左”-链接2不再展开 问:当我们从左边的标签上移开,然后返回到左边的标签上时,左边的标签怎么能“记住”它显示的是“链接2”?(当然,我也希望为正确的选项卡执行此操作) 请注意,我不想以任何方式破解官方Angular(UI路由器等)代码 另外,我希望在第一次显示或选择左侧时,默认情况下会扩展链接1(右侧有类似的默认设置)。但这可能是另一个问题的主题?你可以很容易地做到这一点 在同一级别为每个选项卡设置单独的状态 1) 在$rootSco

请看

  • 单击“左”
  • 单击“链接2”将其展开
  • 单击“右键”
  • 单击“左”-链接2不再展开
  • 问:当我们从左边的标签上移开,然后返回到左边的标签上时,左边的标签怎么能“记住”它显示的是“链接2”?(当然,我也希望为正确的选项卡执行此操作)

    请注意,我不想以任何方式破解官方Angular(UI路由器等)代码


    另外,我希望在第一次显示或选择左侧时,默认情况下会扩展链接1(右侧有类似的默认设置)。但这可能是另一个问题的主题?

    你可以很容易地做到这一点

    在同一级别为每个选项卡设置单独的状态

    1) 在
    $rootScope
    上注册$stateChangeSuccessuccess侦听器。如果目标状态
    包括(“左”)
    包括(“右”)
    ,则跟踪目标状态及其状态参数

    2) 在
    $rootScope
    上注册$stateChangeStart侦听器。如果to状态
    为(“左”)
    为(“右”)
    ,则阻止直接转换到选项卡状态,然后使用
    $state。转到先前为该选项卡保存的状态/参数

    看看我的ui路由器分支,它实现了这一点。我称之为“深度状态重定向”。


    我创建了一个plunk,并将范围侦听器和注册表从我的fork集成到plunk中的根范围。看一看:

    您可能想查看和。为什么不将扩展状态存储在一个更为父级的控制器中?因为我不知道如何。我是n00b:-(+1(还不是答案).我喜欢它!你显然做了很多工作。Plunk正好显示了我想要发生的事情,但我担心UI Routr fork。没有办法用标准的、非分叉的Angular实现它吗?你不需要fork。你只需要一个地方来放置注册表和侦听器。我用概念实现在我的答案中添加了Plunk在根状态的控制器上加载。对延迟回复表示歉意。出现了一些问题。据我所知,我确实喜欢你的Plunk。但是,当我尝试将它应用到我已经存在的应用程序时,通过放置
    $scope.deepStateRedirect.register('top'),每个选项卡都有另外两个选项卡(嵌套的控制器));
    我得到'TypeError:Cannot read property'register'of undefinedI不能肯定,除非看到你是如何构造你的应用程序的,但是错误消息表明deepStateRedirect服务对象不在你正在使用的$scope上。你正在访问的$scope是否是你在控件中放置deepStateRedirect的子作用域如果要将deepStateRedirect添加到$scope,您可以将其添加到$rootScope,以避免父子混淆。