Добавьте несколько электронных писем и введите значения - PullRequest
0 голосов
/ 16 января 2019

Моя форма позволяет обновлять и добавлять несколько писем. Первое поле электронной почты (основное письмо) является обязательным. После заполнения можно нажать кнопку «Добавить письмо» для добавления нового адреса электронной почты. Таким способом можно добавить еще 4 электронных письма (всего 5 электронных писем).

Система проверяет правильность формата электронной почты, отображает сообщение при необходимости и регистрирует данные в БД.

Вот мой взгляд (manageContact.html)

  <div class="panel-body">
    <form name="ContactForm" class="form-horizontal" role="form" novalidate ng-submit="submitForm(contact)">

    <!---------------- FOR UPDATING EMAILS FIELDS ------------ START --->   

    <div ng-repeat="(key, email) in emails | limitTo : 5" style="z-index:6">

      <div class="form-group">

        <span ng-switch="$index">
            <label ng-switch-when="0" for="txtEmail" class="col-sm-2 control-label">Main email</label>
            <label ng-switch-default for="txtEmail" class="col-sm-2 control-label">Email {{$index+1}}</label>
        </span> 

        <div class="col-sm-9" ng-switch="$index">

            <input ng-switch-when="0" type="email" class="form-control"
            name="txtEmail_{{$index}}" maxlength="100" placeholder="Enter main email"
            ng-model="contact.EMAIL">       

            <input ng-switch-default type="email" class="form-control" 
            name="txtEmail_{{$index}}" maxlength="100" placeholder="Enter Email {{$index+1}}" 
            ng-model="contact['EMAIL_'+$index]">    

            <div class="error-container" 
             ng-show="ContactForm['txtEmail_' + $index].$dirty && ContactForm['txtEmail_' + $index].$invalid">
                <div ng-show="ContactForm['txtEmail_' + $index].$error.email" class="alert alert-info" role="alert" style="margin-top:10px;">
                  <span class="glyphicon glyphicon-alert" aria-hidden="true"></span>
                  <span class="sr-only">Error:</span>
                  That is not a valid email. Please input a valid email.
                </div>

                <div ng-show="ContactForm['txtEmail_' + $index].$error.required" class="alert alert-info" role="alert" style="margin-top:10px;">
                  <span class="glyphicon glyphicon-alert" aria-hidden="true"></span>
                  <span class="sr-only">Error:</span>
                  Your email is required.
                </div>

            </div>

        </div>

        <div  class="col-sm-1" ng-show="$index == 0">
            <a href="" ng-click="add()" ng-show="emails.length<5" class="inline btn btn-primary icon_email">
            <span class="glyphicon glyphicon-plus icon2"></span><span class="addButton">Add email</span>
            </a>
        </div>  

      </div>

    </div>
    <!---------------- FOR UPDATING EMAILS FIELDS ------------ END ---> 

    </form> 
  </div>

Чтобы просмотреть все электронные письма, зарегистрированные для контакта, необходимо, чтобы в моем текущем скрипте нажималась кнопка «Добавить электронную почту» каждый раз, когда электронное письмо регистрируется для просмотра данных.

Я хотел бы отобразить электронные письма, если они существуют в БД, поэтому отображать каждый раз строку (поле + данные). Если он не существует, необходимо нажать на кнопку для добавления нового электронного письма.

У меня проблема с выполнением этого в моем ng-switch, и я не знаю, как это сделать другим способом.

Вот мои контроллеры "ctrlEditContacts" и модуль (app.js):

    var app=angular.module('ContactsApp', ['ngRoute', 'ui.bootstrap', 'ngDialog']);

    app.factory('HttpInterceptor', ['$q', '$rootScope', function($q, $rootScope) {
           return {
                ......
                }
            };

    app.config(function($routeProvider, $httpProvider, ngDialogProvider){

        ...  
    });             


    app.controller('ctrlEditContacts', function ($scope, $routeParams, MyTextSearch, ContactService, ngDialog, $timeout){

    //FOR ALLOWING SEVERAL EMAILS
    $scope.emails = [
    {
    }];
    $scope.log = function() {
      console.log($scope.emails);
    };
    $scope.add = function() {
        var dataObj = {email:''};       
        $scope.emails.push(dataObj);
    }

    ContactService.loadPersonById($routeParams.contactId).success(function(contact){    
        $scope.contact.ID = contact[0].ID;  
        $scope.contact.EMAIL = contact[0].EMAIL;
        $scope.contact.EMAIL_1 = contact[0].EMAIL_1;
        $scope.contact.EMAIL_2 = contact[0].EMAIL_2;
        $scope.contact.EMAIL_3 = contact[0].EMAIL_3;
        $scope.contact.EMAIL_4 = contact[0].EMAIL_4;                
    })
    .error(function (data, status, header, config) {
        ...     
    }).finally(function() {   
        ...     
    });             

    $scope.submitForm = function(contact){      
        if($scope.ContactForm.$valid){
            ContactService.updatePerson(contact, $routeParams.contactId).success(function(){
                alert('Person updated successfully');
            })
            .error(function (data, status, header, config) {
            })
            .finally(function() {
            });                     
        }
    };  

});

1 Ответ

0 голосов
/ 16 января 2019

Извините, если я неправильно понимаю.
В этом случае вам нужно указать номер электронной почты контакта.
Например, если вы получаете вид данных ниже; вам нужно выполнить цикл три раза.

$scope.contact.ID = contact[0].ID;  
$scope.contact.EMAIL = contact[0].EMAIL;      // 'test1@mail.com'
$scope.contact.EMAIL_1 = contact[0].EMAIL_1;  // 'test2@mail.com'
$scope.contact.EMAIL_2 = contact[0].EMAIL_2;  // 'test3@mail.com'
$scope.contact.EMAIL_3 = contact[0].EMAIL_3;  // ''
$scope.contact.EMAIL_4 = contact[0].EMAIL_4;  // ''
// So 'emails' should be modified at this timing.
$scope.emails = [];
// Just for loop, so it doesn't matter what value you add.
$scope.emails.push($scope.contact.EMAIL);
$scope.emails.push($scope.contact.EMAIL_1);
$scope.emails.push($scope.contact.EMAIL_2);

После этого меняется условие «Добавить адрес электронной почты».

ng-show="$index == emails.length - 1"

jsfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...