Как перейти к следующей вкладке при отправке первой формы (tab) в Angularjs?

#angularjs #tabs

#angularjs #вкладки

Вопрос:

У меня есть список ролей (в массиве) и отображается список в виде вкладок (который содержит динамическое количество ролей).

Я хочу автоматически перейти к следующей вкладке (т. Е. Следующей форме) после успешного заполнения первой формы.

Как я могу это сделать?

 $scope.array = ["Actor", "Singer", "Lyricist"];
  

Итак, длина моего массива равна 3, и я буду отображать только актера, певца и автора текстов в виде вкладок.

 <li ng-class="{active:isSelected(1)}" ng-if="roleActor==true"class="myli"><a href ng-click="getActorInfo()">Actor</a></li>
<li ng-class="{active:isSelected(2)}" ng-if="roleDirector==true"class="myli"><a href ng-click="getDirectorInfo()">Director</a></li>
<li ng-class="{active:isSelected(3)}" ng-if="roleSinger==true"class="myli"><a href ng-click="getSingerInfo()">Singer</a></li> 
<li ng-class="{active:isSelected(4)}" ng-if="roleLyricist==true"class="myli"><a href ng-click="getLyricistInfo()">Lyricist</a></li> 
  

Как я могу перейти ко второй вкладке, когда я отправил первую форму (tab) и получил сообщение об успешном завершении.

 <div class="panel-body newPanelBody" ng-if="actor amp;amp;  !director amp;amp; !singer amp;amp; !lyricist>
   <h4><b>Please enter your mandatory details</b></h4>
            <hr width="90%" style="border-color: black; margin-left: 10px;">

            <form name="tForm" role="form" data-ng-init="resp()" ng-submit="savePostProfile()" novalidate>
            /* My form here */
</form>
</div>


<div class="panel-body newPanelBody" ng-if=" director amp;amp; !actor amp;amp; !singer amp;amp; !lyricist>
   <h4><b>Please enter your mandatory details</b></h4>
            <hr width="90%" style="border-color: black; margin-left: 10px;">

            <form name="tForm" role="form" data-ng-init="resp()" ng-submit="savePostProfile()" novalidate>
            /* My form here */
</form>
</div>

<div class="panel-body newPanelBody" ng-if=" singer amp;amp; !actor amp;amp; !director amp;amp; !lyricist>
   <h4><b>Please enter your mandatory details</b></h4>
            <hr width="90%" style="border-color: black; margin-left: 10px;">

            <form name="tForm" role="form" data-ng-init="resp()" ng-submit="savePostProfile()" novalidate>
            /* My form here */
</form>
</div>

<div class="panel-body newPanelBody" ng-if="lyricist amp;amp; !actor amp;amp; !director amp;amp; !singer >
   <h4><b>Please enter your mandatory details</b></h4>
            <hr width="90%" style="border-color: black; margin-left: 10px;">

            <form name="tForm" role="form" data-ng-init="resp()" ng-submit="savePostProfile()" novalidate>
            /* My form here */
</form>
</div>
  

Комментарии:

1. Ваш массив имеет только 3 роли, тогда как ваш html поддерживает 4 роли. Вы пытаетесь отображать только вкладки, указанные в вашем $scope.array ?

2. ДА. Я пробовал так, но для меня переход по одним вкладкам выполняется, а страницы не остаются в качестве первого массива. jsfiddle.net/kbjwymbq/11

Ответ №1:

сохраните переменную, в которой будет храниться текущая роль, из которой вы можете отобразить ее форму, и после успешной отправки этой формы измените текущую роль на следующую роль, для которой форма должна быть заполнена.

    <div ng-if=" selectedRole === 'Director'"> 
        <form name="tForm" role="form" data-ng-init="resp()" ng-submit="savePostProfile()" novalidate>
                /* My form here */
        </form>
   </div>  

используйте проверку текущей роли в методе savePostProfile, как указано ниже :

     $scope.roles = ["Actor", "Singer", "Lyricist"];
    $scope.selectedRole = $scope.roles[0];
    $scope.savePostProfile = function(){
        var index = $scope.roles.indexOf($scope.selectedRole);
        console.log(index);
        //add this after save success
        if(index<$scope.roles.length-1){
          $scope.selectedRole = $scope.roles[index 1];
          console.log( $scope.selectedRole);
        }
        else{
          $scope.selectedRole = $scope.roles[0];///will go back to actor form or add anything you want
        }
      };
  

проверьте plunkr, предоставленный для рабочего решения, я удалил css-классы из вашего кода.

https://plnkr.co/edit/Fe08q8HU77KF9x2sjybb?p=preview