2016-04-15 23 views
0

すべての兄弟にクラスを追加する方法は、クリックされたものを期待しています。私が望むものをクリックすると、クリックした兄弟以外のすべての兄弟にクラスblueを適用したいと思います。すべての兄弟にクラスを追加する

http://jsfiddle.net/bm6kujL1/

<div ng-app="editer" ng-controller="myCtrl" class="container"> 

    <div ng-repeat="item in items"> 

    <div class="wrap" ng-click="show =!show" ng-class="{'blue':show}"> 
     <span>{{item.name}}</span> 
     <span ng-show="show">{{item.thing}}</span> 
    </div> 

    </div> 
</div> 



//JS 
function myCtrl($scope) { 
    $scope.editedItem = null; 

    $scope.items = [{ 
    name: "item #1", 
    thing: "thing 1" 
    }, { 
    name: "item #2", 
    thing: "thing 2" 
    }, { 
    name: "item #3", 
    thing: "thing 3" 
    }]; 

    $scope.show = false; 

} 

var editer = angular.module('editer', []); 


//CSS 
.wrap { 
    background: yellow; 
} 

.blue { 
    background: blue; 
} 

答えて

1

私はあなたのJS fiddleにいくつかの小さな変更を加え、それが機能するようになりました。基本的には、すべてのアイテムの表示という1つの属性しか持っていませんでしたが、それぞれが青色であるかどうかを知る必要がありました。

JS:あなたの答えのための

function myCtrl($scope){ 
    $scope.editedItem = null; 

    $scope.items = [ 
     { name :"item #1", thing: "thing 1", selected: false}, 
     { name :"item #2", thing: "thing 2", selected: false}, 
     { name :"item #3", thing: "thing 3", selected: false} 
    ]; 

    function resetAllItems() { 
     for (i in $scope.items) { 
     $scope.items[i].selected = false; 
     } 
    } 

    $scope.selectItem = function(item) { 
       resetAllItems(); 
       item.selected = true; 
    } 

} 

HTML

<div ng-app="editer" ng-controller="myCtrl" class="container"> 

     <div ng-repeat="item in items"> 

      <div class="wrap" ng-click="selectItem(item)" ng-class="{'blue': item.selected}"> 
      <span>{{item.name}}</span> 
      <span ng-show="item.selected" >{{item.thing}}</span> 
      </div> 

     </div> 
    </div> 
+0

答えをありがとう。私は追加のプロパティを追加する必要があるように見えますか? – olo

+1

基本的にはyesです。現在の要素を見つけたり、すべての兄弟を取得したり、それぞれの要素に対してtoggleClassを使用するなど、他の方法もあります。これらのために、jQuery関数の小さなサブセットを持つ角度要素[https://docs.angularjs.org/api/ng/function/angular.element]を使用できます。 – AdelaN

1

あなたは代わりに関数を使用すると、アイテムにshowプロパティを使用することができます。

HTML:

<div class="wrap" ng-click="toggleShow(item)" ng-class="{'blue':item.show}"> 
    <span>{{item.name}}</span> 
    <span ng-show="item.show">{{item.thing}}</span> 
</div> 

JS:

$scope.items = [{ 
    name: "item #1", 
    thing: "thing 1", 
    show: false 
    }, { 
    name: "item #2", 
    thing: "thing 2", 
    show: false 
    }, { 
    name: "item #3", 
    thing: "thing 3", 
    show: false 
    }]; 

$scope.toggleShow = function(item){ 
    for(var i=0; i<$scope.items.length; ++i){ 
     if($scope.items[i] === item){ 
      $scope.items[i].show = false; 
      continue; 
     } 
     $scope.items[i].show = true; 
    } 
} 

フィドル: http://jsfiddle.net/bm6kujL1/2/

+0

感謝。だから私は達成するために追加のプロパティを追加する必要があります、jQueryのDOMだけで遊ぶようなことはできませんか? – olo

+0

これは私が考えることができる最も簡単な方法です。これはDOM操作ではありません。 Angular ApprochはjQueryとはまったく異なります。あなたはDOMを直接操作しません。私はあなたが「DOMだけで遊ぶ」という意味を知らない。あなたは正確ですか? – Groben

関連する問題