AngularJS选项卡嵌套导航

时间:2014-08-13 21:17:33

标签: angularjs tabs navigation nested

我正在迁移到AngularJS,我需要动态创建新标签,使用动态内容,在此标签页面内我需要嵌套导航。示例:单击菜单,使用CustomerList打开新选项卡,单击新建按钮,转到保存/编辑视图,保存后返回到CustomerList。这种行为应该适用于每个标签,而不会改变其他标签的内容。

我已经动态添加了标签,加载了客户列表,转到了视图页面,但是当我打开客户保存/编辑窗口时,按钮停止工作。另一个问题是,当我更改活动选项卡时,所有内容都刷新(丢失状态)。

请帮助我

2 个答案:

答案 0 :(得分:2)

ng-view指令的原则是完全删除标签内容并在每个路由时重新创建DOM。

但是,如果您仍想保留选项卡的状态,则应将数据存储在工厂中,这是一个单例。

答案 1 :(得分:0)

这种方式有效。

<li><a ng-click="newTab('Documentation','Documentação')" href>Documentação</a></li>

HTML

 <tabset id="tabsHome" justified="true">
                <tab ng-repeat="workspace in workspaces"
                     heading="{{workspace.name}}"
                     active=workspace.active>
                    <a ng-click="removeTab(workspace)" href=''><i class="fa fa-times"></i>Fechar</a>
                    <div> 
                       <div ng-include="workspace.url"></div>
                    </div> 
                </tab> 
            </tabset> 

AngularJs

app.controller('TabsCtrl', ['$scope', '$compile', function ($scope, $compile) {
$scope.newTab = function (key, label) {
    if (setAllInactive(key) == false) {$scope.workspaces.push({ id: key, name: label, active: true, url: '/' + key + '/' + key + 'List' });}
}

var setAllInactive = function (id) {
    var work = null;
    angular.forEach($scope.workspaces, function (workspace) {
        if (workspace.id == id) { work = workspace; } workspace.active = false;
    });
    if (work != null && $scope.workspaces.indexOf(work) != -1) {$scope.workspaces[$scope.workspaces.indexOf(work)].active = true; return true;}
    return false;
};

$scope.removeTab = function (workspace) {
    $scope.workspaces.splice($scope.workspaces.indexOf(workspace), 1);
}

$scope.workspaces = []; 
}]);