【问题标题】:How to use nested view objects with ui-router (angular)如何使用带有 ui-router 的嵌套视图对象(角度)
【发布时间】:2016-03-10 08:43:13
【问题描述】:

我提前道歉,我不是角度专家。我正在尝试使用 ui-router 在用户个人资料页面上呈现一系列视图。以下是我目前的路线:

(function() {
'use strict';

angular
    .module('app.routes')
    .config(routesConfig);

routesConfig.$inject = ['$stateProvider', '$locationProvider', '$urlRouterProvider', 'RouteHelpersProvider'];
function routesConfig($stateProvider, $locationProvider, $urlRouterProvider, helper){

    // Set the following to true to enable the HTML5 Mode
    // You may have to set <base> tag in index and a routing configuration in your server
    $locationProvider.html5Mode(false);

    // defaults to dashboard
    $urlRouterProvider.otherwise('/app/home');

    // 
    // Application Routes
    // -----------------------------------   
    $stateProvider
      .state('app', {
          url: '/app',
          abstract: true,
          templateUrl: helper.basepath('app.html'),
          resolve: helper.resolveFor('fastclick', 'modernizr', 'icons', 'screenfull', 'animo', 'sparklines', 'slimscroll', 'classyloader', 'toaster', 'whirl','loaders.css', 'spinkit','jquery-ui', 'jquery-ui-widgets','weather-icons', 'skycons')
      })
      .state('app.home', {
          url: '/home',
          title: 'Home',
          templateUrl: helper.basepath('home.html'),
      })
      .state('app.user', {
          url: '/user',
          title: 'User',
          templateUrl: helper.basepath('user.html'),
          resolve: helper.resolveFor('datatables')
      })
      .state('app.user.dashboard', {
          url: '',
          views: {
            'eventTable': {
              templateUrl: helper.basepath('eventTable.html'),
            },
            'bankStatement': {
              templateUrl: helper.basepath('bankStatement.html'),
            }
          }
      })
} // routesConfig

})();
  • 应用提供一般布局。
  • app.home 是所有用户的主页。
  • app.user 应该是一个用户个人资料页面,其中包含通过两个视图呈现的两个表(eventTable、bankStatement)。

我不确定是否需要额外的 app.user.dashboard 状态,但我不确定如何让视图在 app.user 状态中呈现。以下是其余相关代码:

user.html

<h3>User Profile</h3>
<div ui-view="eventTable"></div>
<div ui-view="bankStatement"></div>

bankStatement.html

<div class="panel panel-default">
   <div id="bankStatementHeader" class="panel-heading">Events</div>
   <div class="panel-body">
      <div ng-controller="EventTableController as table2">
         <table datatable="ng" class="row-border hover">
            <thead>
               <tr>
                  <th>Date</th>
                  <th>Type</th>
                  <th>Description</th>
               </tr>
            </thead>
            <tbody>
               <tr ng-repeat="event in table2.events">
                  <td>{{ event.date }}</td>
                  <td>{{ event.type }}</td>
                  <td>{{ event.description }}</td>
               </tr>
            </tbody>
         </table>
      </div>
   </div>
</div>

eventTable.html

<div class="panel panel-default">
   <div id="bankStatementHeader" class="panel-heading">Bank Statement</div>
   <div class="panel-body">
      <div ng-controller="BankStatementController as table1">
         <table datatable="ng" class="row-border hover">
            <thead>
               <tr>
                  <th>Person ID</th>
                  <th>Event Date</th>
                  <th>Process Date</th>
                  <th>Details</th>
                  <th>Description</th>
                  <th>Amount</th>
                  <th>Balance</th>
               </tr>
            </thead>
            <tbody>
               <tr ng-repeat="statement in table1.statements">
                  <td>{{ statement.id }}</td>
                  <td>{{ statement.eventDate }}</td>
                  <td>{{ statement.processDate }}</td>
                  <td>{{ statement.details }}</td>
                  <td>{{ statement.description }}</td>
                  <td>{{ statement.amount }}</td>
                  <td>{{ statement.balance }}</td>
               </tr>
            </tbody>
         </table>
      </div>
   </div>
</div>

事件表控制器

function() {
    'use strict';

    angular
        .module('app.eventTable')
        .controller('EventTableController', EventTableController);

    EventTableController.$inject = ['$resource', 'DTOptionsBuilder', 'DTColumnDefBuilder'];
    function EventTableController($resource, DTOptionsBuilder, DTColumnDefBuilder) {
        var vm = this;

        activate();

        ////////////////

        function activate() {

          // Ajax

          $resource('server/event-table.json').query().$promise.then(function(events) {
             vm.events = events;
          });
        }
    }
})();

银行对账单控制器

(function() {
    'use strict';

    angular
        .module('app.bankStatement')
        .controller('BankStatementController', BankStatementController);

    BankStatementController.$inject = ['$resource', 'DTOptionsBuilder', 'DTColumnDefBuilder'];
    function BankStatementController($resource, DTOptionsBuilder, DTColumnDefBuilder) {
        var vm = this;
        activate();

        ////////////////

        function activate() {

          // Ajax

          $resource('server/bank-statement.json').query().$promise.then(function(statements) {
             vm.statements = statements;

          });
        }
    }
})();

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    app.user 状态也应该是抽象的。您应该只访问最终状态。单独的 app.user 状态是没有意义的,因为它需要 childdren 模板(ui-views)。

    我在您的路由配置中进行了一些修改,以将 app.user 转换为抽象状态,并使 url /user 附加到 app.user.dashboard 状态。

    我没有测试,但我认为这段代码可以工作。

    (function() {
    'use strict';
    
    angular
        .module('app.routes')
        .config(routesConfig);
    
    routesConfig.$inject = ['$stateProvider', '$locationProvider','$urlRouterProvider', 'RouteHelpersProvider'];
    function routesConfig($stateProvider, $locationProvider, $urlRouterProvider, helper){
    
        // Set the following to true to enable the HTML5 Mode
        // You may have to set <base> tag in index and a routing configuration in your server
        $locationProvider.html5Mode(false);
    
        // defaults to dashboard
        $urlRouterProvider.otherwise('/app/home');
    
        // 
        // Application Routes
        // -----------------------------------   
        $stateProvider
          .state('app', {
              url: '/app',
              abstract: true,
              templateUrl: helper.basepath('app.html'),
              resolve: helper.resolveFor('fastclick', 'modernizr', 'icons', 'screenfull', 'animo', 'sparklines', 'slimscroll', 'classyloader', 'toaster', 'whirl','loaders.css', 'spinkit','jquery-ui', 'jquery-ui-widgets','weather-icons', 'skycons')
          })
          .state('app.home', {
              url: '/home',
              title: 'Home',
              templateUrl: helper.basepath('home.html'),
          })
          .state('app.user', {
              abstract: true,
              templateUrl: helper.basepath('user.html'),
              resolve: helper.resolveFor('datatables')
          })
          .state('app.user.dashboard', {
              url: '/user',
              title: 'User',
              views: {
                'eventTable': {
                  templateUrl: helper.basepath('eventTable.html'),
                },
                'bankStatement': {
                  templateUrl: helper.basepath('bankStatement.html'),
                }
              }
          })
        } // routesConfig
    
    })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多