HTML:
<body ng-app="ap" ng-controller="con">
<div ng-class="class">{{class}}</div>
<button id="button1" ng-click="changeClass($event)">Change Class</button>
<div ng-class="class1">{{class1}}</div>
<button id="button2" ng-click="changeClass($event)">Change Class</button>
</body>
の
JSは:
var app = angular.module("ap",[]);
app.controller("con",function($scope){
$scope.class = "red";
$scope.class1 = "red";
$scope.changeClass = function(event){
console.log(event.currentTarget.id);
if(event.currentTarget.id === "button1")
if ($scope.class === "red")
$scope.class = "blue";
else
$scope.class = "red";
else if(event.currentTarget.id === "button2")
if ($scope.class1 === "red")
$scope.class1 = "blue";
else
$scope.class1 = "red";
};
});
Fiddle
私は、もう少しコードをリファクタリングしている必要があります。しかし、私の最初のアイデアは、あなたがあなたのng-click
とともに$event
に合格する必要があり、独自にevent.currentTarget.id
を介してそれらを識別するためにボタンにidを提供することである。またギーグエンのフィドルは、ディレクティブでそれを行うには、より理にかなっています同じ要素が2回あるからです。それらを指示の中でカプセル化する。この方法では、$イベントを使用してボタンのIDを決定する必要はなく、コントローラは特定のディレクティブのchangeClassだけを処理します。
EDIT1:
var app = angular.module("ap",[]);
app.controller("con",function($scope){
$scope.class = "red"; // default class
$scope.changeClass = function($event){
if ($($event.target).prev().hasClass('red')) {
$($event.target).prev().removeClass('red').addClass('blue');
} else {
$($event.target).prev().removeClass('blue').addClass('red');
}
};
});
HTML:
<body ng-app="ap" ng-controller="con">
<div ng-class="class">{{class}}</div>
<button ng-click="changeClass($event)">Change Class</button>
<div ng-class="class">{{class}}</div>
<button ng-click="changeClass($event)" >Change Class</button>
</body>
通常あなたの繰り返しの要素がスコープモデルのデータ構造を繰り返すことに関連することになります。次に、適切なクラスを決定するのに役立つ各項目のプロパティを使用できます。あなたはデモを単純化し過ぎているようです。あなたの実際の世界のユースケースは何ですか? – charlietfl
私は折り畳み可能なコンテンツを作っていますが、svgイメージをクリックすると-90degressを回転します。問題は、svgをクリックするとクラスの変更がすべてのsvgに適用されます。 – Frutis
Ok ....コントローラのデータモデルに基づいてレンダリングされないコンテンツセクション/ svgですか?これは角度アプリが一般的にどのように働くのかです。 – charlietfl