使用嵌套状态作为ui-router中的选项卡

时间:2017-12-20 16:13:22

标签: javascript angularjs angular-ui-router

这个特殊情况下的文档看起来有点稀疏,但是我正在使用this教程的“多个关于页面的视图”部分,this SO帖子支持。

我正在尝试将我的一个页面转换为父状态,将每个选项卡呈现为子状态。下面的语法不会引发错误,但只有标签标题呈现,没有内容。我在子控制器的init函数中设置了断点,没有触发,我在控制台中没有收到任何错误。我还在$stateChangeError回调中创建了一个断点,并且在那里也没有任何内容。

父州

<div class="container">
    <h2> <i class="fa fa-user"></i> Click to Call Settings for {{user.fullName}}</h2>
    <uib-tabset active="active" id="usersettings">
        <uib-tab index="0" heading="SIP Settings"> 
            <div ui-view="sipSettings"></div> 
        </uib-tab>   
        <uib-tab index="1" heading="Favorites"> 
            <div ui-view="favorites"></div>       
        </uib-tab>
    </uib-tabset>  
</div>>

favoritesPartial.html(为了空间而编辑)

<form name="favoritesForm">
    <div ng-repeat="favorite in pbxFavorites" id="favoritesContainer">

    </div>
</form>
<div class="form-footer">
    <button type="button" class="btn btn-white" ng-click="$root.goBack()">Go Back</button>
    <button type="submit" class="btn btn-primary" ng-click="saveFavorites()">Save Favorites</button>
</div> 

sipSettingsPartial.html(为空间而编辑)

<form name="sipSettingsForm">
    <div class="row">

    <div class="form-footer">
        <button type="button" class="btn btn-white" ng-click="$root.goBack()">Go Back</button>
        <button type="submit" class="btn btn-primary" ng-click="savePbxSettings()">Save Settings</button>
    </div>  
 </form>

州提供商

        .state('clickToCall', {
            url: '/clickToCall',
            templateUrl: 'app/components/clickToCall/clickToCall.html',
            controller: 'ClickToCallController',
            controllerAs: 'vm',
            parent: 'app',
            authenticate: true,
            resolvePolicy: {when:'LAZY', async: 'WAIT'},
            resolve:{
                security:['$q', '$rootScope', 'parentResolves',  'routeErrors', function($q, $rootScope, parentResolves, routeErrors){
                    if($rootScope.isLoggedIn()){
                        return $q.resolve();
                    } else {
                        return $q.reject(routeErrors.NO_ACCESS);
                    }
                }]
            },
            params:{
                'user':''
            },
            view:{
                'sipSettings@clickToCall': {
                    templateUrl: 'app/components/clickToCall/sipSettingsPartial.html',
                    controller: 'SipSettingsController'
                },
                'favorites@clickToCall':{
                    templateUrl: 'app/components/clickToCall/favoritesPartial.html',
                    controller: 'FavoritesController'
                }
            }
        })

文件夹结构

enter image description here

屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:0)

愚蠢的错字......将view部分命名为views而不是templateUrl,并将 .state('clickToCall', { url: '/clickToCall', controller: 'ClickToCallController', controllerAs: 'vm', parent: 'app', authenticate: true, resolvePolicy: {when:'LAZY', async: 'WAIT'}, resolve:{ security:['$q', '$rootScope', 'parentResolves', 'routeErrors', function($q, $rootScope, parentResolves, routeErrors){ if($rootScope.isFirmAdmin2 || $rootScope.isCloud9){ return $q.resolve(); } else { return $q.reject(routeErrors.NO_ACCESS); } }] }, params:{ 'user':'' }, views:{ '':{ templateUrl: 'app/components/clickToCall/clickToCall.html' }, 'sipSettings@clickToCall': { templateUrl: 'app/components/clickToCall/sipSettingsPartial.html', controller: 'SipSettingsController' }, 'favorites@clickToCall':{ templateUrl: 'app/components/clickToCall/favoritesPartial.html', controller: 'FavoritesController' } } }) 留在父状态。以下配置有效:

import xlsxwriter

data = [[1,2,3,4],
        [5,6,7,8],
        [9, 10, 11, 12]]

def write_xlsx(data, filename):
    workbook = xlsxwriter.Workbook(filename + ".xlsx")

    for item in data:
        worksheet = workbook.add_worksheet()
        worksheet.write_row("A1", item)

    workbook.close()

write_xlsx(data, "test")