2016-06-10 7 views
0

Ich arbeite mit eckigen, Knoten, Express und PostgreSQL/Sequelize in einem lustigen kleinen Projekt. Allerdings ist es ein bisschen zu lustig geworden. Ich bin neu in dieser Umgebung zu entwickeln, also kann ich einige falsche Strukturen verwenden. Aber ich versuche eine Update-Route für ein Modell einzurichten. Das JS für das Update ist scheinbar gut, so wie es soll, aber das Problem hier ist, dass wenn die Funktion aufgerufen wird und die Post-Methode initiiert wird, sie nicht die Werte aus der Formulargruppe in HTML übernimmt. Ich aber, aus der Antwort -POST-Methode sendet nicht alle Daten

<div class="container"> 
    <div ng-controller="SomethingCtrl"> 
    <form ng-submit="updateSomething(updateform)" role="form" ng-init="updateform = {}"> 
     <div class="datagrid"><table> 
     <thead> 
     <tr> 
      <th> ID </th> 
      <th> field1 </th> 
      <th> field2 </th> 
      <th> field3 </th> 
     </tr> 
     </thead> 
     <tbody> 
     <tr ng-repeat="something in somethings | filter:{id:somethingId} | orderBy:'id' | limitTo: 1 track by $index"> 
      <td> 
      {{something.id}} 
      </td> 
      <td> 
      <div class="form-group"> 
       <input class="form-control" type="text" name="field1" value="{{something.field1}}"/> 
      </div> 
      </td> 
      <td> 
      <div class="form-group"> 
       <input class="form-control" type="text" name="field2" value="{{something.field2}}"> 
      </div> 
      </td> 
      <td> 
      <div class="form-group"> 
       <input class="form-control" type="number" name="field3" value="{{something.field3}}"> 
      </div> 
      </td> 
     </tr> 
     </tbody> 
     </table> 
     </div> 
     <div> 
     <button type="submit"><strong>Update</strong></button> 
     </div> 
    </form> 
    </div> 
</div> 

Wenn ich in die Netzwerkanalyse von diesem gehen, sendet er JSON-Daten, aber es den Wert nicht angeben:

Hier ist ein Ausschnitt des html/Winkel In das Konsolenprotokoll gelangen Ich denke, es sendet nur das aktuelle Datum, da das einzige aktualisierte Attribut updateTime ist. Hier

ist die JS, die ich Werke denken:

exports.UpdateSomethings = function (req, res) { 
    models.Something.find({ 
    where: { 
     id: req.params.id 
    } 
    }).then(function (something) { 
    if (something) { // if the record exists in the db  
     something.updateAttributes({ 
     field1: req.body.field1, 
     field2: req.body.field2, 
     field3: req.body.field3 
     }).then(function (somethings) { 
     res.json(somethings.dataValues); 
     }).catch(function (error) { 
     console.log("ops: " + error); 
     res.status(500).json({ error: 'error' }); 
     }); 
    } 
    ; 
    }); 
}; 

Und im Controller:

$scope.updateSomething = function() { 
    $http.post('/somethingupdate/:id', { 
    field1: $scope.somethingField1, 
    field2: $scope.somethingField2, 
    field3: $scope.somethingField3, 

    }).success(function (data, status, headers, config) { 
    $scope.somethings.push({ 
    field1: $scope.somethingField1, 
    field2: $scope.somethingField2, 
    field3: $scope.somethingField3, 
    }); 
    $scope.somethingField1 = ''; 
    $scope.somethingField2 = ''; 
    $scope.somethingField3 = ''; 
    }).error(function (data, status, headers, config) { 
    console.log("Ops: " + data); 
    }); 
}; 

Hier ist das Ergebnis in der Konsole:

Executing (default): SELECT "id", "field", "createdAt", "updatedAt" FROM "Soemthings" AS "Something" WHERE "Something"."id" = 'id value'; 
Executing (default): UPDATE "Somethings" SET "field1"='' "field2" = '' "field3" = '' "updatedAt"='2016-06-09 20:20:57.384 +00:00' WHERE "id" = id value 

Antwort

1

AKTUALISIERT!

Sie eine leere Menge vorbei, wenn einreichen, prüfen Sie Ihre updateform Variable

Sie benötigen ng-Modelle auf Ihre Eingaben hinzuzufügen, die mit updateform beginnt

<input class="form-control" ng-model="updateform.field1" type="number" name="field1" ng-init="updateform.field3 =something.field3"> 

Und so weiter. Da Sie gesagt haben, Sie verwenden $scope.somethingField können Sie es in Ihrem Markup verwenden, dann habe ich auch ein verstecktes Feld für id hinzugefügt.

<div class="container"> 
<div ng-controller="SomethingCtrl"> 
<form ng-submit="updateSomething(updateform)" role="form"> 
    <div class="datagrid"><table> 
    <thead> 
    <tr> 
     <th> ID </th> 
     <th> field1 </th> 
     <th> field2 </th> 
     <th> field3 </th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr ng-repeat="something in somethings | filter:{id:1} | orderBy:'id' | limitTo: 1 track by $index"> 
     <td> 
     <input type="hidden" ng-model="updateform.id" ng-init="updateform.id = something.id"> 
     {{something.id}} 
     </td> 
     <td> 
     <div class="form-group"> 
      <input class="form-control" ng-model="updateform.field1" type="text" ng-init="updateform.field1 = something.field1" /> 
     </div> 
     </td> 
     <td> 
     <div class="form-group"> 
      <input class="form-control" ng-model="updateform.field2" type="text" ng-init="updateform.field2 = something.field2" /> 
     </div> 
     </td> 
     <td> 
     <div class="form-group"> 
      <input class="form-control" ng-model="updateform.field3" type="text" ng-init="updateform.field3 =something.field3" /> 
     </div> 
     </td> 
    </tr> 
    </tbody> 
    </table> 
    </div> 
    <div> 
    <button type="submit"><strong>Update</strong></button> 
    </div> 
</form> 

Dann in Ihrem Controller außerhalb der Funktion $ scope.updateSomething:

$scope.updateform = { 
    field1: '', 
    field2: '', 
    field3: '' 
} 

Dann in Sie update add Parameterfeld Controller-Funktion für versuchen Konsolenprotokolle zu überprüfen, ob field enthält Daten:

$scope.updateSomething = function (field) { 
    console.log(field); 
    $http.post('/somethingupdate/' + field.id, { 
     field: field, 
    }).success(function (data, status, headers, config) { 
     $scope.somethings.push({ 
      field: field 
     }); 
    }).error(function (data, status, headers, config) { 
     console.log("Ops: " + data); 
    }); 
}; 

Hier ist eine funktionierende JSfiddle

+0

Hey, @Efx Ich habe das versucht, aber es hat nicht geholfen. Bei der Aktualisierung werden nur das Feld updatedAt und ein Feld aktualisiert. Das Feldattribut hat einen Wert von '', der, wie ich glaube, von der Anweisung $ $ scope.somethingField = ''; im Controller kommt. Hast du irgendwelche Vorschläge? – Tetraphenom

+0

Auf Ihrer Funktion in der Steuerung können Sie ein Parameterfeld hinzufügen und verwenden Sie stattdessen in $ scope.somethingfield – Efx

+0

Um '$ scope.somethingField = ''; – Tetraphenom

1

Versuchen ng- model = "something.field1" anstelle von value = "{{something.field1}}" und so weiter ..