1

リストがあり、リストの各項目はクリック可能です。

各項目が 1 回だけクリックできるようにしたい。

誰かがクリックすると、無効になるか、2 回目はクリックできなくなります。

私のコードは以下のようなものです:

<li data-ng-repeat="item in items">
  <a id="{{item.id}}" data-ng-click="insertRecord(item.id)" data-ng-controller="addCtrl">
  {{item.name}}
  </a>
</li>
4

3 に答える 3

1

flimの答えはほとんど機能しますが、アイソレートスコープを作成するため、コントローラーに含まれるスコープでaddCtrl定義する必要があります。これが実用的な解決策です:seenIdsaddCtrl

HTML:

<div ng-app ng-controller="MainCtrl">
  <ul>
    <li data-ng-repeat="item in items">
      <a id="{{item.id}}" data-ng-controller="addCtrl"
          data-ng-click="item.clicked || insertRecord(item.id); item.clicked = true">
      {{item.name}}
      </a>
    </li>
  </ul>
</div>

JS:

function MainCtrl($scope) {
    $scope.items = [
        {id: 1, name: 'foo'},
        {id: 2, name: 'bar'}
        ];

    $scope.insertRecord = function(itemId) {
        alert(itemId + ' clicked (inserting...)');
    };
}

function addCtrl($scope) {
}

JSFiddle を参照してください

于 2013-05-03T09:44:24.437 に答える
0

addCtrl のスコープでハッシュを作成する

$scope.seenIds = {}

insertRecord(item.id) は、ID が表示されているかどうかを最初に確認します。ある場合は、何もしないでください。

$scope.insertRecord = function (id) {
  if (typeof $scope.seenIds[id] === "undefined") {
    $scope.seenIds[id] = 1;
    // do your thing
  }
}

好きなだけクリックできますが、最初のクリック以外は何も起こりません。

于 2013-05-03T09:29:09.500 に答える
0

jQuery でクリック ハンドラーをアタッチする場合は、次.one()のように使用できます。

$("#whatever").one(insertRecord);//no need to pass a an id as it can be derived within the function

Angular でこれができるかどうかはわかりません。

于 2013-05-03T07:09:33.200 に答える