我有一个与集合中包含Date对象的数据库的mongoose连接.我想使用角度材料的DatePicker控件查看这些Date对象. Date对象遵循ISO字符串格式.
以下是代码段:
<md-datepicker ng-model="license.expirationdate" md-placeholder="Enter date"> </md-datepicker>
我收到以下错误:
md-datepicker的ng-model必须是Date实例.
在研究时,我发现您可以使用过滤器来创建一个Date实例,但这对我来说无效 – >我收到一条错误消息,指出在使用简单过滤器时,模型值不可分配.该过滤器根据字符串输入返回一个新的Date对象.
如何将字符串格式化为Date对象,同时仍然允许ng模式更改?
编辑:mongoose的模式
var Schema = mongoose.Schema;
var Schema = mongoose.Schema; var modelschema = new Schema({ name : String,licensetype : String,activationcount : Number,expirationdate: Date,key : String })
这是填充模式的快速路由
app.post('/licenses',function (req,res) { console.log(req.body.expirationDate); License.create({ name: req.body.licenseName,licensetype: req.body.licenseType,activationcount: 0,expirationdate: req.body.expirationDate,key: "123456" },function (err,license) { if (err) { res.send(err); console.log(err); } //Send user back to main page res.writeHead(301,{ 'Location': '/','Content-Type': 'text/plain' }); res.end(); } ) });
这是一个例子:
标记:
<div ng-controller="MyCtrl"> <md-datepicker ng-model="dt" md-placeholder="Enter date" ng-change="license.expirationdate = dt.toISOString()"> </md-datepicker> {{license.expirationdate}} </div>
JavaScript的:
app.controller('MyCtrl',function($scope) { $scope.license = { expirationdate: '2015-12-15T23:00:00.000Z' }; $scope.dt = new Date($scope.license.expirationdate); });
小提琴:http://jsfiddle.net/masa671/jm6y12un/
更新:
使用ng重复:
标记:
<div ng-controller="MyCtrl"> <div ng-repeat="d in data"> <md-datepicker ng-model="dataMod[$index].dt" md-placeholder="Enter date" ng-change="d.license.expirationdate = dataMod[$index].dt.toISOString()"> </md-datepicker> {{d.license.expirationdate}} </div> </div>
JavaScript的:
app.controller('MyCtrl',function($scope) { var i; $scope.data = [ { license: { expirationdate: '2015-12-15T23:00:00.000Z' } },{ license: { expirationdate: '2015-12-20T23:00:00.000Z' } },{ license: { expirationdate: '2015-12-25T23:00:00.000Z' } } ]; $scope.dataMod = []; for (i = 0; i < $scope.data.length; i += 1) { $scope.dataMod.push({ dt: new Date($scope.data[i].license.expirationdate) }); } });