UI路由器"面包屑"用于多步骤形式AngularJS

时间:2016-06-01 14:55:38

标签: javascript angularjs forms angular-ui-router breadcrumbs

我在Angular 1上的UI-Router中创建了一个多步骤表单,而且我打了一个砖墙。

我将在scotch.io的UI路由器多步骤表单教程中使用此示例。

这是他们的index.html

<body ng-app="formApp">

    <div class="container">

        <!-- views will be injected here -->
        <div ui-view></div>

    </div>

</body>

哪个拉动了form.html和app.js

app.js

.config(function($stateProvider, $urlRouterProvider) {

    $stateProvider

        // route to show our basic form (/form)
        .state('form', {
            url: '/form',
            templateUrl: 'form.html',
            controller: 'formController'
        })

        // nested states 
        // each of these sections will have their own view
        // url will be nested (/form/profile)
        .state('form.profile', {
            url: '/profile',
            templateUrl: 'form-profile.html'
        })

        // url will be /form/interests
        .state('form.interests', {
            url: '/interests',
            templateUrl: 'form-interests.html'
        })

        // url will be /form/payment
        .state('form.payment', {
            url: '/payment',
            templateUrl: 'form-payment.html'
        });

    // catch all route
    // send users to the form page 
    $urlRouterProvider.otherwise('/form/profile');
})

form.html

  <div class="page-header text-center">
      <h2>Let's Be Friends</h2>

      <!-- the links to our nested states using relative paths -->
      <!-- add the active class if the state matches our ui-sref -->
      <div id="status-buttons" class="text-center">
          <a ui-sref-active="active" ui-sref=".profile"><span>1</span> Profile</a>
          <a ui-sref-active="active" ui-sref=".interests"><span>2</span> Interests</a>
          <a ui-sref-active="active" ui-sref=".payment"><span>3</span> Payment</a>
      </div>
  </div>

  <!-- use ng-submit to catch the form submission and use our Angular function -->
  <form id="signup-form" ng-submit="processForm()">
      <!-- our nested state views will be injected here -->
      <div id="form-views" ui-view></div>
  </form>

此处有3种状态,

  1. 资料
  2. 兴趣
  3. 付款
  4. 一旦进入第1步,您就可以在第一页上看到任何步骤的所有链接。

    我希望创建一个面包屑,你只能看到页面加载的第1步,然后是第2步和第1步,等等。

    然而 - 问题在于,因为它是一个多步形式,我希望用户能够在X步骤之后返回步骤1并仍然看到< / em>面包屑中的1到X.

    我目前解决最终目标的解决方案看起来像这样

     <a ui-sref-active="active" ui-sref=".profile"><span>1</span> Profile</a>
     <a ng-if="('form.payment' | isState) || ('form.interests' | isState) || (form | isState)" ui-sref-active="active" ui-sref=".interests"><span>2</span> Interests</a>
     <a ng-if="('form.payment' | isState) || (form | isState)" ui-sref-active="active" ui-sref=".payment"><span>3</span> Payment</a>
    

    不完全优雅,但有效。

    基本上,如果用户填写4个步骤并返回1,他们仍然应该看到&#34;面包屑&#34;中的所有4个步骤。 (他们达到的最深层次)。

    我正在考虑存储哪个是用户已达到的最远的状态,并根据该状态呈现链接数,但不太确定如何实现。

0 个答案:

没有答案