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
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
Auf Ihrer Funktion in der Steuerung können Sie ein Parameterfeld hinzufügen und verwenden Sie stattdessen in $ scope.somethingfield – Efx
Um '$ scope.somethingField = ''; – Tetraphenom