Angularjs:从屏幕2导航回来时,在屏幕-1上恢复活动选项卡

时间:2016-08-28 06:41:17

标签: angularjs

我有一个屏幕-1('主屏幕'),它有三个标签(比如tab1,tab2和tab3)。当app启动时,'tab3'处于活动状态(在homeController.js中我设置了“$ scope.active ='tab3'”)。

现在当我打开'tab1'(所以'主动'类更新为'tab1')并从这个'tab1'重定向到另一个屏幕-2($ location.path('/ pathToScreen2')使用路由), screen-2启动时有一个后退按钮,单击后退按钮($ location.path('/ pathToScreen1')),它会导航回到屏幕-1。

现在当启动screen-1时,活动选项卡是'tab3'而我希望'tab1'应该是活动的(可能每次homeController加载时,它都会初始化“$ scope.active ='tab3'”) 。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:1)

在Mikki的帮助下,下面是我如何实现这一目标。

<强> ActiveTabService

&#13;
&#13;
angular.module("DemoApp")
.service('ActiveTabService', function(){
        var activeTab = 'tab3';
        return {
            getActiveTab: function(){
                return activeTab;
            },
            setActiveTab: function(tab){
                activeTab = tab;
            }
        }
});
&#13;
&#13;
&#13;

以下是包含路由和多个屏幕的complete demo。它可能对某人有帮助。

答案 1 :(得分:0)

你不应该在控制器变量中保存状态,因为控制器有自己的生命周期,用它所有定义的变量进行销毁。

所以你需要的是创建某种状态service并在那里初始化你的活动标签。在与选项卡功能相关的所有控制器中注入此服务,并在用户输入某个控制器后设置为此状态服务活动选项卡。

P.S。 服务是单件,所以如果你向少数控制器注入服务,他们都将拥有指向同一对象的链接,并且在你手动完成之前不会被销毁