0

我有这样的动态表单功能

$scope.ProdLinkFormData = {};
$scope.ProdLinkFormData.link = [{
  link: null,
  price: null,
  priceType: null,
  category: null
}, {
  link: null,
  price: null,
  priceType: null,
  category: null
}];
$scope.addLinkItem = function() {
  $scope.ProdLinkFormData.link.push({
    link: null,
    price: null,
    priceType: null,
    category: null
  });
};

$scope.removeLinkItem = function(linkItem) {
  //console.log(subscriber);
  $scope.ProdLinkFormData.link.pop(linkItem);
};

我的观点包含这样的东西

<div id="web" ng-repeat="linkItem in ProdLinkFormData.link">
  <div class="row col-xs-12">
    <div class="col-xs-6">
      <div class="form-group">
        <label class="col-md-6 control-label">*Category: </label>
        <select class="pull-left" id="prodLinkCategory" name="prodLinkCategory" ng-required="true" ng-model="prodLinkNew[$index].category" required/>
        <option ng-repeat="item in scpProdLinkCat" value="{{item.prodlink_category_value}}" ng-selected="prodLinkNew[$index].category==item.prodlink_category_value">{{item.prodlink_category_name}}</option>
        </select>
      </div>
      <div class="form-group">
        <label class="col-md-6 control-label">Price (optional): </label>
        <div class="input-group">
          <div class="input-group-btn">
            <select class="btn btn-primary dropdown-toggle dropdown-toggle-split" name="price" id="price" ng-model="prodLinkNew[$index].price_type">
              <option ng-repeat="item in scpPriceType" value="{{item.pricetype_name}}">{{item.pricetype_name}}</option>
            </select>
          </div>
          <input type="number" class="col-md-1 input-group inline form-control" name="price" id="price" ng-model="prodLinkNew[$index].price" ng-pattern="/^[0-9]+$/" / ng-value="prodLinkNew[$index].price">
        </div>
      </div>
    </div>
    <div class="col-xs-6">
      <div class="form-group">
        <label class="col-md-6 control-label">*Product Link EC: </label>
        <div class="col-md-6">
          <input type="text" class="form-control" name="prodEC" ng-required="true" id="prodEC" ng-model="prodLinkNew[$index].Productlink_EC" required/>

        </div>
      </div>
    </div>
  </div>

它会相应地显示,但我的问题是,如果我在数据库中有两个数据,则页面加载时表单上只会显示一个数据,而第二个数据只有在我添加另一个数据后才会显示。如何同时显示两个数据?

4

2 回答 2

0

如果我理解你的问题

  1. 起初你有一个来自 api 的新数组,例如有 2 个对象
  2. 第二个你想显示第一个表格
  3. 当您单击添加时,应添加第二种形式
  4. 此示例是动态的,您可以在其中添加n对象apiArray

'use strict';
var app = angular.module('app', []);

app.controller("ctrl", function ($scope) {
    $scope.apiArray = [
        {
            num: 1,
        },
        {
            num: 2,
        }];
    //create new model
    $scope.newArray = [];
    
    $scope.newArray.push($scope.apiArray[0]);
    
    $scope.add = function () {
        var apiArrayLength = $scope.apiArray.length - 1;
        var newArrLength = $scope.newArray.length - 1;
        if (newArrLength < apiArrayLength) {
            $scope.newArray.push($scope.apiArray[newArrLength + 1])
        }
    };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<div ng-app="app" ng-controller="ctrl">
  <div class="col-lg-4 col-lg-offset-4">
    <br>
    <br>
    <div class="alert alert-info">
      <b>apiArray</b> length is {{apiArray.length}}, we can add just {{apiArray.length}} form in <b>newArray</b>, form 1 is default added to newArray
    </div>
    <button ng-click="add()" class="btn btn-primary">add</button>
    <div class="clearfix"></div>
    <hr>
    <div class="col-lg-12" ng-repeat="linkItem in newArray">
      <div class="well">
        form {{linkItem.num}}
      </div>
    </div>
  </div>
</div>

于 2017-06-02T07:32:07.463 回答
0

angular.module('mainApp', [])
.controller('MainCtrl', function($scope){
    $scope.ProdLinkFormData = {};
    $scope.ProdLinkFormData.link = [
            { link: null, price: null, priceType: null, category: null },
            { link: null, price: null, priceType: null, category: null }
    ];
    $scope.addLinkItem = function() {
            $scope.ProdLinkFormData.link.push({ link: null, price: null, priceType: null, category: null });
    };

    $scope.removeLinkItem = function(linkItem) {
        //console.log(subscriber);
        $scope.ProdLinkFormData.link.pop(linkItem);
    };

})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.js"></script>
<div ng-app="mainApp" ng-controller="MainCtrl">

<div id="web" ng-repeat="linkItem in ProdLinkFormData.link">
<div class="row col-xs-12">
<div class="col-xs-6">
<br/><br/>
<div class="form-group">
    <label class="col-md-6 control-label">*Category: </label>
    <select class="pull-left" id="prodLinkCategory" name="prodLinkCategory" ng-required="true" ng-model="prodLinkNew[$index].category" required/>
       <option ng-repeat="item in scpProdLinkCat" value="{{item.prodlink_category_value}}" ng-selected="prodLinkNew[$index].category==item.prodlink_category_value">{{item.prodlink_category_name}}</option>
    </select>
</div>
<br/><br/><br/>
<div class="form-group">
<label class="col-md-6 control-label">Price (optional): </label>
<div class="input-group">
<div class="input-group-btn">
<select class="btn btn-primary dropdown-toggle dropdown-toggle-split" name="price" id="price" ng-model="prodLinkNew[$index].price_type">
    <option ng-repeat="item in scpPriceType" value="{{item.pricetype_name}}">{{item.pricetype_name}}</option>
    </select>
    </div>
<input type="number" class="col-md-1 input-group inline form-control" name="price" id="price" ng-model="prodLinkNew[$index].price" ng-pattern="/^[0-9]+$/"/ ng-value="prodLinkNew[$index].price">
</div>
</div>
<br/><br/>
</div>
    <div class="col-xs-6">
    <br/><br/>
    <div class="form-group">
        <label class="col-md-6 control-label">*Product Link EC: </label>
        <div class="col-md-6">
            <input type="text" class="form-control" name="prodEC" ng-required="true" id="prodEC" ng-model="prodLinkNew[$index].Productlink_EC" required/>

</div>
</div>
</div>
    <br/><br/>
            </div>
            <br/><br/>
    </div>
        </div>

</div>

只需复制并粘贴您的代码并在其周围添加一个模块,它就会按预期将两个条目加载到 ng-repeat 的视图中。

如果您想要填充到链接属性数组中的内容,请验证从服务器返回的数据将其粘贴到此处。

于 2017-06-02T06:40:47.517 回答