データポイントの ng-repeat <ul> リストを持つ angularjs ページがあります。各 <li> には削除リンク (これを削除 1 と呼びます) があり、クリックするとその削除 1 リンクを非表示にし、その場所にさらに 2 つのリンクを表示する必要があります: キャンセルと削除 (これを削除 2 と呼びます)。[キャンセル] リンクをクリックすると、元の [削除 1] リンクが表示され、[キャンセル] リンクと [削除 2] リンクが非表示になる必要があります。現在、これはすべて機能していますが、新しい要件があります。
削除 1 リンクをクリックすると、他のリスト アイテムのすべての「キャンセルして削除 2」リンク ペアを非表示にする必要があります。AngularJS はシングル アクション ベースなので、deleteLinkClick と cancelLinkClick の関数を作成して、必要な複雑なアクションを作成します。
以下に示すコントローラ コードを見ると、show フラグが false に設定されていることがわかりますが、機能しません。提案?
これが私の(スリムな)htmlページです:
... OTHER STUFF...
ul
li.address ng-repeat="data in request.theData" ng-init="showWarning=[]"
.address-li
.address-details
p
|Field 1: {{data.field1}}
span ng-if="data.field2!=''"
br
|Field 2: {{data.field2}}
span
span.button-small.button-cancel ng-show="!showWarning[$index]" ng-click="deleteLinkClick(showWarning,$index)" Delete
span.button-small.button-cancel ng-show="showWarning[$index]" ng-click="cancelLinkClick(showWarning,$index)" Cancel
span.button-small.button-delete.button-warn ng-show="showWarning[$index]" ng-click="deleteAddress($index)" Delete
... OTHER STUFF...
これが私の(coffeescript)コントローラーコードです:
@MyPage.controller('MyController',
['$scope', '$rootScope', '$location', 'NtdRequest', 'Form', '$anchorScroll'
($scope, $rootScope, $location, ntd_request, form, $anchorScroll) ->
$scope.currentIndex = -1
$scope.cancelLinkClick = (array,index) ->
array[index] = false
$scope.currentIndex = -1
$scope.deleteLinkClick = (array,index) ->
if ($scope.currentIndex != -1)
array[$scope.currentIndex] = false
array[index] = true
$scope.currentIndex = index
]
)
前もって感謝します
-w