Search code examples
angularjsangularjs-material

Form in Angular Dialog - Get form data after dialog close


I created a webpage with Angularjs and Laravel. It's an event page. In my admin-panel I can manage all events.

Overview

When I click at "Bearbeiten" a new window appears.

Form Window

At the bottom I can add/remove different attractions. When I submit the form, I want save the new data in the database, but I don't know how I can get the data from the formula. I tried different thinks and yes I used google.

When I click at "Bearbeiten" following code will be executed:

<md-dialog-content style="padding: 20px;">
    <div layout-gt-sm="row">
        <md-input-container class="md-block"flex-gt-xs>
            <label>Name (Bsp: Schützenfest, Kirmes, Sommerdom)</label>
            <input value="{{ $data['event']->name }}" name="event_name">
        </md-input-container>
        <md-input-container class="md-block">
            <label>Stadt (Bsp: Hannover, München, Köln)</label>
            <input value="{{ $data['event']->city }}" name="event_city">
        </md-input-container>
    </div>
    <div layout-gt-sm="row">
        <md-input-container class="md-block" style="margin: 0" flex-gt-xs>
            <label>Straße</label>
            <input value="{{$data['event']->street }}" name="event_street">
        </md-input-container>
        <md-input-container class="md-block" style="margin: 0" flex-gt-xs>
            <label>Postleitzahl</label>
            <input value="{{ $data['event']->zip->id }}" name="event_zip">
        </md-input-container>
        <md-input-container class="md-block" style="margin: 0">
            <label>Webseite</label>
            <input value="{{ $data['event']->website }}" name="event_website">
        </md-input-container>
    </div>
    <div layout-gt-sm="row">
        <md-input-container class="md-block" style="margin: 0" flex-gt-xs>
            <label>Start (YYYY-MM-DD)</label>
            <input value="{{$data['event']->start }}" name="event_start">
        </md-input-container>
        <md-input-container class="md-block" style="margin: 0" flex-gt-xs>
            <label>Letzter Spieltag (YYYY-MM-DD)</label>
            <input value="{{$data['event']->end }}" name="event_end">
        </md-input-container>
    </div>
    <md-chips ng-model="mdDialogData[0]" name="event_attractions" readonly="false"
            md-removable="true" md-max-chips="100" placeholder="Attraktionen">
        <md-autocomplete
          md-selected-item="mdDialogData[1].selectedItem"
          md-search-text="mdDialogData[1].searchText"
          md-items="item in mdDialogData[1].querySearch(mdDialogData[1].searchText)"
          md-item-text="item"
          placeholder="Attraktion suchen">
          <span md-highlight-text="mdDialogData[1].searchText" style="width: 280px;">@{{ item }}</span>
        </md-autocomplete>
    <md-chip-template>
      <strong style="margin-right: 15px;">@{{$chip}}</strong>
    </md-chip-template>
  </md-chips>
</md-dialog-content>

<md-dialog-actions layout="row">
  <span flex></span>
  <md-button ng-click="answer([@{{ mdDialogData[0] }}, '1', '2'])">
   Änderungen speichern
  </md-button>
  <md-button ng-click="answer('useful')">
    Abbrechen
  </md-button>
</md-dialog-actions>

I am not really good with angular. Maybe are here some experts!


Solution

  • Since the data is already populating on the popup, I will assume you have correctly passed the data array to the function/module responsible for the popup.

    Now, all you need is to update the array containing variable data fields that you are modifying. You will need to remove the data you chose to remove from the array, or keep adding if you are adding new values. You will then need to pass updated array as you click on ABBRECHEN and need to update the new values in the DB. The data removed from the array will create empty spaces in the array, you can either remove it on the Angular or Backend, or simply put the logic to skip if particular index is null/undefined.