2016-05-25 12 views
0

Ich bin eine Client-Sammlung mit den folgenden Informationen Aufbau:Aktualisieren

"name" : "Test client", 
"email" : "[email protected]", 
"position" : "Project Manger", 
"contacts" : [ 
    { 
     "name" : "asdf", 
     "email" : "[email protected]", 
     "tel" : "7877877878", 
     "title" : "asdf" 
    }, 
    { 
     "name" : "fdas", 
     "email" : "[email protected]", 
     "tel" : "7877877878", 
     "title" : "fdsa" 
    } 
], 

Ich möchte in der Lage sein, die Kontakte des Kunden zu bearbeiten/aktualisieren, aber ich Ich bin nicht sicher, wie dies mit eckigen zu tun, da ich die Form innerhalb einer ng-Wiederholung die Kontakte eines Kunden zu wiederholen.

<div ng-repeat="contact in contacts track by $index"> 
    <label>Name</label> 
    <input type="tel" ng-model="contact.name"> 
    <label>Telephone</label> 
    <input type="tel" ng-model="contact.tel"> 
    <label>Email</label> 
    <input type="email" ng-model="contact.email"> 
    <label>Title</label> 
    <input type="text" ng-model="contact.title"> 
    <md-button ng-click="save(contact)">Save</md-button> 
</div> 

und mein Controller:

'use strict' 

angular.module('myApp') 
.controller('ContactsCtrl', function($scope, $mdDialog, $mdMedia, client) { 

    $scope.client = client; 

    $scope.contacts = client.contacts; 


    $scope.save = (contact) => { 
    Clients.update({_id: client._id},{ 
     $set: { 
     contacts : contact 
     } 
    },function(err, data){ 
     if(err) return console.log(err); 
     console.log(data + " "); 
     $mdDialog.hide(data); 
    }); 
    } 

    $scope.cancel = function() { 
    $mdDialog.cancel(); 
    }; 

    $scope.hide = function() { 
    $mdDialog.hide(); 
    }; 
}); 

Aber wenn ich save drücken ersetzt es das Array mit einem einzelnen Objekt.

FRAGE

Wie kann ich die vorhandenen Objekte in einem Array aktualisieren, die mit einem Formular in einem Dokument, die ein ng-repeat ist drin?

Antwort

2

Änderung html:

<div ng-repeat="contact in contacts track by $index"> 
    <label>Name</label> 
    <input type="tel" ng-model="contact.name"> 
    <label>Telephone</label> 
    <input type="tel" ng-model="contact.tel"> 
    <label>Email</label> 
    <input type="email" ng-model="contact.email"> 
    <label>Title</label> 
    <input type="text" ng-model="contact.title"> 
    <md-button ng-click="save($index,contact)">Save</md-button> 
</div> 

und save() Funktion

$scope.save = (index,contact) => { 
    Clients.update({_id: client._id},{ 
     $set: { 
     contacts[index] : contact 
     } 
    },function(err, data){ 
     if(err) return console.log(err); 
     console.log(data + " "); 
     $mdDialog.hide(data); 
    }); 
    } 

hoffe, es funktioniert der Trick.

+0

Hallo, Ihr Code macht Sinn, aber ich halte Syntaxfehler immer bei 'Kontakte [Index]: Kontakt' –

0

War in der Lage, eine Arbeit zu tun, aber ich bin mir nicht sicher, ob dies die beste Option ist.

Gerade $index hinzufügen, wenn die save Funktion tun:

<md-button ng-click="save($index, contact)">Save</md-button>

und in der Steuerung der Speicherfunktion:

$scope.save = (index, contact) => { 
    $scope.client.contacts[index] = contact; 
    Clients.update({_id: client._id},{ 
    $set: { 
     contacts : $scope.client.contacts 
    } 
    },function(err, data){ 
    if(err) return console.log(err); 
    console.log(data + " "); 
    $mdDialog.hide(data); 
    }); 
} 
Verwandte Themen