扩展mean模块findOne()来处理字符串的其他属性

时间:2014-12-07 16:22:18

标签: javascript angularjs node.js mongoose angular-promise

当使用生成器启动一个新的meanjs项目(mongoose,angular等)并添加一个CRUD模块时,我得到这样的方法:

    $scope.findOne = function() {
        $scope.income = Incomes.get({
            incomeId: $stateParams.incomeId
    });

在我的收入服务器模型如下所示,它在这些属性上有一些不同的属性和一些不同的对象类型,例如,数字,日期和字符串。

当我在promise" $ scope.findOne"之后我的$ scope.income中获取数据时已经成功我的所有数据都是字符串。我需要将它们中的每一个都投射到合适的类型吗?

在我的前端,我想在我的"更新"的输入元素中呈现不同的类型。视图。例如:

          <label class="control-label" for="date">Date of transaction</label>
            <div class="list-group-item">
                <div class="controls">
                    <input type="date" data-ng-model="income.date" id="date" class="form-control" placeholder="Date" required>
                </div>

这不起作用,因为对象$ scope.income.date由一个字符串组成。将输入类型更改为字符串会使其显示。但我想在这里使用日期选择器。

我应该写一些类似的东西:

        $scope.findOne = function() {
        Incomes.get({
            incomeId: $stateParams.incomeId
        }).then(function(data){
            var dateVar=new Date(data.date);
            var amountVar =Number(data.amount) 
            $scope.income ={date: dateVar, name: data.name, amount:amountVar}()
        );

这里的最佳做法是什么?

我正在使用的模型:

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

/**
 * Income Schema
 */
var IncomeSchema = new Schema({
    name: {
        type: String,
        default: '',
        required: 'Please fill Income name',
        trim: true
    },
    amount: {
      type: String,
      default: '',
      required: 'Please fill Income amount',
      trim: true
    },
    date: {
        type: Date,
        default: '',
        required: 'Please fill Income date',
        trim: true
    },
    monthly: {
        type: Boolean,
        default: '',
        required: 'Please fill whether income is recurring monthly',
        trim: true
    },
    yearly: {
      type: Boolean,
      default: '',
      required: 'Please fill whether income is recurring yearly',
      trim: true
    },
    account: {
      type: Schema.ObjectId,
      ref: 'Account',
      required: 'Please select account'

  },
    created: {
        type: Date,
        default: Date.now
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});

mongoose.model('Income', IncomeSchema);

2 个答案:

答案 0 :(得分:0)

首先,我必须掌握这一承诺,而不是我可以从Incomes.get响应中轻松构建更复杂的对象。数据作为JSON通过网络发送,因此它只是文本,因此我需要使用f ex将其实例化为正确的类型。日期和号码:

   Incomes.get({
                incomeId: $stateParams.incomeId
            }).$promise.then(function(data){
                var dateVar=new Date(data.date);
                var amountVar =Number(data.amount) 
                $scope.income ={date: dateVar, name: data.name, amount:amountVar}()
            );

答案 1 :(得分:0)

为了使资源函数能够正常删除工作,需要使用“this”,不要忘记promise在另一个命名空间中,因此需要“that = this”。

  var that=this;
  Incomes.get({
    incomeId: $stateParams.incomeId
  }).$promise.then(function(income){

        income.date= new Date(income.date);

        var recurringVar;
        if(income.monthly===true){
          recurringVar = 'monthly';
        } else if( income.yearly===true){
          recurringVar = 'yearly';
        }
        income.recurring=recurringVar;
        that.income=income;
      });