【问题标题】:how do i store ng-repeat array form data in meanjs?如何在 meanjs 中存储 ng-repeat 数组表单数据?
【发布时间】:2016-01-27 15:52:41
【问题描述】:

我正在使用来自 meanjs.org 的 MEANJS。 试图存储 deal 的 ng-repeat 数组数据,它下面有 dealtypedealprice 作为数组,但无法这样做。 我在创建表单中为 ng-repeat 输入标签设置了 addFields,但它不存储数据。这是我的代码。

food.server.model.js

 var FoodSchema = new Schema({
 created: {
   type: Date,
   default: Date.now
 },
name: {
  type: String,
  default: '',
  required: 'Please fill Food name',
  trim: true
},
deal: [{
  dealtype: {
      type: String,
      default: '',
      trim: true
   },
 dealprice: {
    type: String,
    default: '',
    trim: true
  }
 }],
 user: {
  type: Schema.ObjectId,
  ref: 'User'
  }
});

foods.client.controller.js

// initial array setup

var deal = [ { dealtype: '',dealprice: '' }, {dealtype: '',dealprice: '' } ];

 $scope.food = {};
    $scope.food.deal = deal;
    $scope.addItem = function() {
        $scope.food.deal.push({
            dealtype: '',
            dealprice: ''
        });
    };

 // Create new Food
 $scope.create = function (isValid) {
   $scope.error = null;
    if (!isValid) {
    $scope.$broadcast('show-errors-check-validity', 'foodForm');
    return false;
  }

  // Create new Food object
  var food = new Foods({
    name: this.name,
    deal:[{
            dealtype: this.dealtype,
            dealprice: this.dealprice,
          }],
  });

  // Redirect after save
  food.$save(function (response) {
    $location.path('foods/' + response._id);

    // Clear form fields
    $scope.name = '';
    $scope.dealtype = '';
    $scope.dealprice = '';
  }, function (errorResponse) {
    $scope.error = errorResponse.data.message;
  });
};

create-food.client.view.html

<form name="foodForm" class="form-horizontal" ng-submit="create(foodForm.$valid)" novalidate>
  <fieldset>
    <div class="col-md-12">
        <md-input-container flex="">
        <label >Food Name</label>
        <input type="text" data-ng-model="name" id="name"  required>
    </md-input-container>
</div>
<div ng-repeat="de in food.deal">
   <div class="col-md-6">
       <md-input-container class="">
          <label class="" for="dealtype">Dealtype</label>
          <input type="text" data-ng-model="de.dealtype" id="dealtype"   >
       </md-input-container>
   </div>
   <div class="col-md-6">
      <md-input-container class="">
         <label class="" for="dealprice">Dealprice</label>
         <input type="text" data-ng-model="de.dealprice" id="dealprice"   >
      </md-input-container>
    </div>
</div>
<a href ng:click="addItem()" class="btn btn-small">add item</a>
<button  class="md-primary md-raised width-100 md-whiteframe-5dp" type="submit">Create  Food</button>

<div ng-show="error" class="text-danger">
    <strong ng-bind="error"></strong>
</div>
</fieldset>
</form>

【问题讨论】:

  • 正确使用 ng-model。在 addItem 函数中,您直接推送交易类型和交易价格。这是错误的。使用一个单独的数组变量,然后分配给范围变量。
  • ng:click="addItem()" 是语法错误吗?
  • ng-click="addItem()" 只是添加其他字段,我正在尝试在单击提交按钮时保存其所有数据
  • 我不太明白你的问题是什么。你能给我们提供一些 plunker 中的代码吗?或许我可以帮你

标签: javascript arrays angularjs meanjs


【解决方案1】:

尝试在不使用嵌入式数组的情况下设置您的架构,并在没有交易的情况下发送。如果可行,您可能需要使用子文档设置架构。

如果您想将交易属性设置为子文档,您需要关注this。您将单独定义交易模式。像这样的:

var dealSchema = new Schema({ {
  dealtype: {
    type: String,
    default: '',
    trim: true
  },
  dealprice: {
    type: String,
    default: '',
    trim: true
  }
} });

var FoodSchema = new Schema({
  ...,
  deal: [dealSchema]
})

【讨论】:

  • 您好,我查看了您之前的答案,其中一个是子文档。我试过了,它奏效了。你能回到那个答案吗,这是正确的答案,这样我就可以打勾了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多