2016-04-15 54 views
0

如何向所有兄弟姐妹添加班級,期望點擊該班級。當我點擊一個我想要的,我想申請類blue所有兄弟姐妹,而不是我點擊。Angular ngclick爲所有兄弟姐妹添加班級

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,和現在的工作。基本上,你只有一個屬性叫所有項目顯示,但你需要知道每一個,如果它應該是藍色或不。

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

基本上是。還有其他方法,例如查找當前元素,獲取其所有兄弟並在每個元素上使用toggleClass。對於這些,你可以使用角度元素[https://docs.angularjs.org/api/ng/function/angular.element],其中有一小部分jQuery函數。 – 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認識與jQuery真的不同。你不直接操縱DOM。我不知道「只使用DOM玩」的意思。你能精確嗎? – Groben