如何用指令中更新的对象填充空数组?

时间:2016-11-05 13:37:29

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat angular-directive

我开始使用Angular指令进行冒险。 在我的应用程序的某个地方,我必须选择乘客的数量。然后我必须分配"名字"和"姓氏"对于他们每个人。 enter image description here 所以我创建了简单的指令来为它创建html模板并在ng-repeat中使用它:

<div class="main">
<div class="fix">

</div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non est sit amet tellus blandit cursus at tincidunt ex. Etiam arcu ante, cursus sed lectus eu, vehicula maximus quam. Nam vel quam porta, pretium leo vel, tristique velit. Quisque ut arcu sit amet quam imperdiet rutrum. Ut volutpat pharetra felis, ac dictum urna blandit ac. Suspendisse facilisis ullamcorper molestie.
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non est sit amet tellus blandit cursus at tincidunt ex. Etiam arcu ante, cursus sed lectus eu, vehicula maximus quam. Nam vel quam porta, pretium leo vel, tristique velit. Quisque ut arcu sit amet quam imperdiet rutrum. Ut volutpat pharetra felis, ac dictum urna blandit ac. Suspendisse facilisis ullamcorper molestie.</p>    

<div class="container"> 
<div class="block">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non est sit amet tellus blandit cursus at tincidunt ex. Etiam arcu ante, cursus sed lectus eu, vehicula maximus quam. Nam vel quam porta, pretium leo vel, tristique velit. Quisque ut arcu sit amet quam imperdiet rutrum. Ut volutpat pharetra felis, ac dictum urna blandit ac. Suspendisse facilisis ullamcorper molestie. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non est sit amet tellus blandit cursus at tincidunt ex. Etiam arcu ante, cursus sed lectus eu, vehicula maximus quam. Nam vel quam porta, pretium leo vel, tristique velit. Quisque ut arcu sit amet quam imperdiet rutrum. Ut volutpat pharetra felis, ac dictum urna blandit ac. Suspendisse facilisis ullamcorper molestie.</p>    
</div>
</div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non est sit amet tellus blandit cursus at tincidunt ex. Etiam arcu ante, cursus sed lectus eu, vehicula maximus quam. Nam vel quam porta, pretium leo vel, tristique velit. Quisque ut arcu sit amet quam imperdiet rutrum. Ut volutpat pharetra felis, ac dictum urna blandit ac. Suspendisse facilisis ullamcorper molestie. Nam facilisis elit eu neque sodales fringilla. Morbi laoreet, ex sit amet sagittis congue, risus lorem tempor eros, pulvinar semper sem nunc non erat. Phasellus posuere metus lacus, sit am et sollicitudin purus pulvinar et. Curabitur diam arcu, viverra a magna at, faucibus imperdiet eros. Quisque eros metus, posuere in bibendum eget, mattis eget nisl.et sollicitudin purus pulvinar et. Curabitur diam arcu, viverra a magna at, faucibus imperdiet eros. Quisque eros metus, posuere in bibendum eget, mattis eget nisl.

<img class="big_pic" src="http://katyaburg.ru/sites/default/files/pictures/krasota_prirody/krasivye_cvety_rozy_kartinki_foto_05.jpg">

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent non est sit amet tellus blandit cursus at tincidunt ex. Etiam arcu ante, cursus sed lectus eu, vehicula maximus quam. Nam vel quam porta, pretium leo vel, tristique velit. Quisque ut arcu sit amet quam imperdiet rutrum. Ut volutpat pharetra felis, ac dictum urna blandit ac. Suspendisse facilisis ullamcorper molestie. Nam facilisis elit eu neque sodales fringilla. Morbi laoreet, ex sit amet sagittis congue, risus lorem tempor eros, pulvinar semper sem nunc non erat. Phasellus posuere metus lacus, sit am et sollicitudin purus pulvinar et. Curabitur diam arcu, viverra a magna at, faucibus imperdiet eros. Quisque eros metus, posuere in bibendum eget, mattis eget nisl. et sollicitudin purus pulvinar et. Curabitur diam arcu, viverra a magna at, faucibus imperdiet eros. Quisque eros metus, posuere in bibendum eget, mattis eget nisl.

Nullam dui libero, gravida id dui ac, pellentesque gravida justo. Quisque id dolor non nunc scelerisque varius a malesuada felis. Duis aliquam malesuada tortor, quis laoreet lacus vestibulum ut. Sed a vestibulum nunc, in maximus magna. Donec vel ante in nisi volutpat venenatis quis sit amet purus. Nunc eget posuere tortor. Donec in mi lectus. Mauris iaculis aliquet orci, at condimentum ligula bibendum et. Cras egestas metus a pellentesque malesuada. Etiam et imperdiet arcu, nec gravida massa. Sed maximus, lorem a dignissim faucibus, lorem neque laoreet elit, ut scelerisque augue ex et odio. Suspendisse ut pretium magna, sed elementum neque. Donec efficitur lectus vitae erat gravida fringilla et vel ante. Sed consectetur, odio vel venenatis mattis, nisl felis dapibus quam, eget ultrices augue nisi quis sapien.

</div>

和doubleInput.html:

app.directive('ngDoubleInputBox', function() {
  return {
    restrict: 'E',
    scope: {
      'heading': '@?',
      'leftInputHeading': '@?',
      'rightInputHeading': '@?',
      'headingNumber': '@?',
      'passenger' : '='
    },
    templateUrl: '/src/html/doubleInput.html'
  }
});

用法:

<div class="inputContainer">
  <div class="containerTitle">{{headingNumber}}{{heading}}</div>
  <form class="form-inline">
    <div class="form-group leftInputContainer">
      <label for="left-input">{{leftInputHeading}}</label>
      <div>
        <input class="form-control" type="text" id="left-input" ng-model="passenger.firstName">
      </div>
    </div>
    <div class="form-group rightInputContainer">
      <label for="right-input">{{rightInputHeading}}</label>
      <div>
        <input class="form-control" type="text" id="right-input" ng-model="passenger.lastName">
      </div>
    </div>
  </form>
</div>

我只有很多乘客和空阵。

<div class="flightPassengersContent" ng-repeat="passenger in getPassengers() track by $index">
  <ng-double-input-box
  heading-number="{{$index + 1}}" heading=". Passenger"
  left-input-heading="First name" right-input-heading="Last name"
  model={{passenger}}>
  </ng-double-input-box>
</div>

所以我的问题是: 如何创建我可以在这里使用的数据数组?将数组元素传递给指令并更改它们是一种好方法吗?如果是这样,如何准备这样的阵列?我尝试使用空值创建一些默认的乘客对象,并通过$ index&#34; 语句摆脱跟踪,但它没有用。

有什么想法吗?

此致 米甲

1 个答案:

答案 0 :(得分:0)

我必须修改我的指令及其用法(将乘客属性替换为模型属性):

指令:

app.directive('ngDoubleInputBox', function() {
  return {
    restrict: 'E',
    scope: true,
    scope: {
      'heading': '@?',
      'leftInputHeading': '@?',
      'rightInputHeading': '@?',
      'headingNumber': '@?',
      'model':'='
    },
    templateUrl: '/src/html/doubleInput.html'
  }
});

用法:

<ng-double-input-box
heading-number="{{$index + 1}}" heading=". Passenger"
left-input-heading="First name" right-input-heading="Last name"
model=passenger>
</ng-double-input-box>

模板:

<div>
    <input class="form-control" type="text" ng-model="model.firstName">
</div>

@georgeawg我能够删除追踪$ index 并避免错误:

错误:ngRepeat:在中继器中重复密钥

更换后

$scope.getPassengers = function() {
    return new Array($scope.passengersAmmount);
};

  (function initializeEmptyPassengers() {
    $scope.passengers = [];
    for(i=0; i< $scope.passengersAmmount; i++) {
      $scope.passengers.push(
        {}
      );
    };
  })();

  $scope.getPassengers = function() {
    return $scope.passengers;
  };

所以现在我正在处理带有空对象的数组并将这些对象传递给指令,但对我来说这不是一个非常干净的解决方案。有谁知道它是否可以使用
  ng-repeat track by $ index ,结果相同但没有先前的数组初始化?