【问题标题】:ng-click adds a class on all elements instead of just oneng-click 在所有元素上添加一个类,而不仅仅是一个
【发布时间】:2017-07-11 15:47:40
【问题描述】:

我有一个使用以下代码创建的矩阵:

<div class="cell-container" ng-repeat="cell in field">
    <div ng-repeat="cols in cell track by $index" class="cell" ng-click="selectShip(cols)" ng-class="{ selected: !cols.empty }">
        {{ $parent.$index }} {{ $index }} 
    </div>
</div>

在指令中我有一个函数,当点击时应该改变对象值并向点击的元素添加一个类

scope: {
    field: '=',
    type: '@'
},
link: function($scope) {
    $scope.selectShip = function(item) {
        if ( item.empty === true ) {
            item.empty = false;
        } else {
            item.empty = true;
        }
    }
}

问题是当我点击内部 ng-repeat 中的一个 div 时,它会更改对象值并在所有 div 上添加一个类,而不仅仅是被点击的那个。

我做错了什么?

【问题讨论】:

  • 您在 HTML 或页面中的何处使用指令?
  • 我不明白这个问题
  • 您显示的这个模板是指令的模板还是您页面的模板(部分视图或路由)?
  • 它是一个指令模板。

标签: javascript angularjs


【解决方案1】:

一定是因为你在使用$scope。相反,您应该使用隔离范围为创建的所有指令元素提供单独的范围。 默认情况下,角度中的指令继承父范围。 你可以在这里找到一些帮助 - How to create an isolate scope

【讨论】:

  • 已经创建了一个隔离范围。看看指令代码的第一行。
  • 但是你没有在链接功能中使用它-$scope.selectShip = function(item) {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2019-12-02
  • 2015-03-21
  • 2012-10-08
  • 2020-10-09
  • 1970-01-01
  • 2016-07-31
相关资源
最近更新 更多