【问题标题】:Binding button to element inside ng-repeat将按钮绑定到 ng-repeat 内的元素
【发布时间】:2018-08-22 19:49:37
【问题描述】:

我正在尝试将ng-repeat 内的按钮绑定到同一重复中按钮的唯一元素,对我来说很难用词来形容,所以我会给出一个代码 sn-p。

<li ng-repeat="thing in listOfThings track by $index">
  <div ng-model="text"> text < /div>
  <button ng-click="highlightText()" />
</ li>

虽然不准确,但就是这样。问题是当我单击按钮时,它会突出显示listOfThings 中的所有文本。

注意:假设文本被赋予了一个 ng 类,当布尔值为真时高亮显示,当它为假时不高亮显示,由按钮切换。

知道如何将该按钮“绑定”到只有一个文本,这样它就不会突出显示其他所有内容?

我已经尝试用谷歌搜索它,它可能是一个重复的问题,但不确定如何搜索这个特定的东西,所以如果它是重复的,请链接答案。

【问题讨论】:

  • 添加highlightText函数的代码。由于 ng-repeat 创建了新的嵌套非隔离范围,它可能会出现问题,或者你会得到它的工作

标签: javascript angularjs angularjs-ng-repeat unique bind


【解决方案1】:

如果我正确理解了您的示例,您的 ng-class 将根据点击事件将该类应用于您重复中的所有项目。

您需要按列表中的每个元素单独跟踪按钮选择。比如:

HTML:

<li data-ng-repeat="thing in listOfThings track by $index">
  <div data-ng-model="text" data-ng-class="{ 'highlighted': thing.Selected  }"> < /div>
  <button data-ng-click="highlightText(thing)" />
</li>

JS:

$scope.highlightText = function(thing){
    thing.Selected = true;
}

CSS:

.highlighted{
   background-color: yellow;
}

编辑skyboyer 提出了很好的建议,可以通过移动突出显示的函数而不跟踪 thing 变量上的标志来使其更清晰。

HTML:

<li data-ng-repeat="thing in listOfThings track by $index">
  <div data-ng-model="text" data-ng-class="{ 'highlighted': selected  }"> < /div>
  <button data-ng-click="selected = true" />
</li>

【讨论】:

  • 你好 P. 最好的!欢迎来到 SO。我想指出,由于 ng-repeat 创建了新范围(非隔离),因此可以跳过变异 thing。那就是你可以使用ng-class="{highlighted: selected}"... ng-click="selected = true"
猜你喜欢
  • 2015-10-18
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
相关资源
最近更新 更多