【问题标题】:AngularJS: Render tags dynamically in a separate div from a input box multiple timesAngularJS:多次在输入框的单独div中动态呈现标签
【发布时间】:2019-07-24 07:52:16
【问题描述】:

好的,我有一个显示多个学生数据的 ng-repeat,现在我想在每个 ng-repeat 中添加一个标签部分,其中包含标签。因此,基本上它们将是一个输入元素,它采用 sag 名称并将其添加到该特定学生的标签部分。

// 这是在 ng-repeat

里面
<form>
<div id="tags">
</div>
<br>
<input id="tagvalue" ng-keypress="myFunct($event)" class="inputTag"
       ng-model="addtags" placeholder="Add a tag"> 
</form>

// 内部控制器

$scope.myFunct = function(keyEvent) {
 if (keyEvent.which === 13)
 {
   var value = document.getElementById('tagvalue')
   var target = document.getElementById('tags');
   var newElement = angular.element("<span class='badge'>"+value.value+"</span>");

   angular.element(target).append(newElement);
   this.addtags=""
  }
}

为所有学生创建输入字段,但标签部分仅适用于第一个学生

【问题讨论】:

标签: javascript angularjs tags angularjs-ng-repeat


【解决方案1】:

在创建 &lt;span&gt; 元素之前,您使用 ID tags 获取参考 - 并且每个学生都会重复此 id,这就是为什么只为第一个学生添加标签的原因;

您可以采用不同的方法,将这些标签添加到学生对象本身,然后使用嵌套的 ng-repeat 简单地打印标签;

在下面工作sn-p

var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
  $scope.firstname = "John";
  $scope.studentsData = [{
    name: 'Mr. one',
    tags: []
  }, {
    name: 'Ms. two',
    tags: []
  }, {
    name: 'Mr. three',
    tags: []
  }, {
    name: 'Mr. four',
    tags: []
  }, {
    name: 'Ms. five',
    tags: []
  }, ];

  $scope.myFunct = function(keyEvent, indexNumber) {

    if (keyEvent.which === 13 && this.addtags.length > 0) {
      var value = document.getElementById('tagvalue');
      $scope.studentsData[indexNumber].tags.push(this.addtags);
      this.addtags = "";
    }
  }
});
.badge {
  border: 1px solid red;
  margin: 2px;
}

input {
  float: right;
}

.students {
  margin: 5px
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<div ng-app="myApp" ng-controller="formCtrl">
  <form>

    <div class='students' ng-repeat='item in studentsData'>
      Student Name: <b>{{item.name}}</b>
      <ng-container id="tags" ng-repeat='tag in item.tags' class='badge'>
        <span> {{tag}} </span>
      </ng-container>
      <input id="tagvalue" ng-keypress="myFunct($event, $index)" class="inputTag" ng-model="addtags" placeholder="Add a tag">

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

【讨论】:

  • 请将答案标记为已接受 - 这会给你一些分数,并给予这个答案更多的权重以供将来参考
猜你喜欢
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2021-07-07
  • 2017-03-31
相关资源
最近更新 更多