我有一个名为Patients的模型和一个名为Drugs的模型。每位患者都可以服用多种药物。
我正在使用ng-repeat来遍历患者并展示。每位患者都会显示一个包含可用药物列表的选择框。我能够将所选药物的ID记录到控制台,但我似乎无法将其成功推送到模型。
< 节点模型>
Patient.model.js
module.exports = function (mongoose, name) {
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var schema = mongoose.Schema({
name: String,
drugs: [String],
tests: [String]
});
mongoose.model(name, schema);
};
Drug.model.js
module.exports = function (mongoose, name) {
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var schema = mongoose.Schema({
name: String
});
mongoose.model(name, schema);
};
<节点控制器>
Patient.controller.js
var mongoose = require('mongoose'),
Patient = mongoose.model('Patient');
exports.create = function (req, res) {
var patient = new Patient(req.body);
patient.save(function (err) {
if (err) {
res.send(400, err);
} else {
res.send(patient);
}
});
};
exports.read = function (req, res) {
Patient.findById(req.params.id, function (err, patient) {
if (err) {
res.send(400, err);
} else if (!patient) {
res.send(404);
} else {
res.send(patient);
}
});
};
exports.update = function (req, res) {
var id = req.params.id,
data = req.body;
delete data._id; // Just in case...
Patient.findByIdAndUpdate(id, data, function (err) {
if (err) {
res.send(400, err);
} else {
res.send({success: true, msg: 'saved'});
}
});
};
exports.del = function (req, res) {
var id = req.params.id;
Patient.findById(id, function (err, patient) {
if (err) {
res.send(400, err);
} else if (!patient) {
res.send(404);
} else {
patient.remove(function (err) {
if (err) {
res.send(400, err);
} else {
res.send({success: true, msg: 'removed'});
}
});
}
});
};
exports.search = function (req, res) {
Patient.find(req.query, function (err, patients) {
if (err) {
res.send(400, err);
} else {
res.send(patients);
}
});
};
<角度控制器>
patientController.js
angular
.module('dpMean.patient')
.controller('PatientCtrl', function ($scope, Restangular, $log) {
'use strict';
var Patient = Restangular.all('patient');
Patient.getList()
.then(function (patients) {
$scope.patients = patients;
})
.catch(function (err) {
$log.error(err);
});
var Drug = Restangular.all('drug');
Drug.getList()
.then(function (drugs) {
$scope.drugs = drugs;
})
.catch(function (err) {
$log.error(err);
});
/* $scope.add and $scope.delete live here */
$scope.select = function(id, pid){
console.log(id);
var patientDrugs = Restangular.one("patient", pid);
var array = patientDrugs;
console.log(array);
var newarray = array.push(id);
var update = {
drugs: newarray
}
console.log(patientDrugs);
patientDrugs.put(update);
};
});
<角度模板>
<div>
<h3>Patients</h3>
<ul class="unstyled">
<li class="patient-item" ng-repeat="patient in patients">
<h4>{{patient.name}}</h4>
<label>Add Drug</label>
<select ng-options="drug.name for drug in drugs" ng-model="drug" ng-change="select(drug._id, patient._id)">
</select>
<ul>
<li ng-repeat="drug in patient.drugs">
{{drug}}
</li>
</ul>
{{ patient.drugs}}
<hr />
<a ng-click="delete(patient._id)">[Remove Patient]</a>
</li>
<li class="patient-item">
<form ng-submit="add()">
<input type="text" placeholder="New item..." ng-model="name"/>
<button type="submit" ng-disabled="posting || !name">Add</button>
</form>
</li>
</ul>
</div>
所需行为:当用户从选择框中选择药物时,所选药物的ID将被添加到患者。{patientID} .drugs,这是一个数组。
非常感谢您提供的任何帮助。
答案 0 :(得分:2)
此
$scope.select = function(id, pid){
console.log(id);
var patientDrugs = Restangular.one("patient", pid);
var array = patientDrugs;
console.log(array);
var newarray = array.push(id);
var update = {
drugs: newarray
}
console.log(patientDrugs);
patientDrugs.put(update);
};
可以缩短为
$scope.select = function(id, pid){
var patientDrugs = Restangular.one("patient", pid);
var update = {
drugs: patientDrugs.push(id)
}
patientDrugs.put(update);
};
立即弹出一个问题,你得到了parientDrugs
数组,你将ID
推入到你创建的名为update
的对象中,然后你将对象推入原来的阵列。
如果我理解正确,这应该有效。但我不确定
$scope.select = function(id, pid){
var patientDrugs = Restangular.one("patient", pid);
patientDrugs.push(({drugs: id})); //This line depends on what the patientDrugs object looks like
};