什么是*Angular*获取元素兄弟姐妹的方法?

Gre*_*g B 22 angularjs

使用AngularJS单击兄弟姐妹时,获取元素兄弟姐妹的惯用方法是什么?

到目前为止,我有这个:

<div ng-controller="FooCtrl">
    <div ng-click="clicked()">One</div>
    <div ng-click="clicked()">Two</div>
    <div ng-click="clicked()">Three</div>
</div>

<script>
    function FooCtrl($scope){
        $scope.clicked = function()
        {
            console.log("Clicked", this, arguments);
        };
    }
</script>
Run Code Online (Sandbox Code Playgroud)

这是一个jQuery实现作为一个具体的例子:

<div id="foo">
    <div>One</div>
    <div>two</div>
    <div>three</div>
</div>

<script>
    $(function(){
        $('#foo div').on('click', function(){
            $(this).siblings('div').removeClass('clicked');
            $(this).addClass('clicked');
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

Mar*_*cok 25

使用指令,因为您想要遍历DOM:

app.directive('sibs', function() {
    return {
        link: function(scope, element, attrs) {
            element.bind('click', function() {
                element.parent().children().removeClass('clicked');
                element.addClass('clicked');
            })
        },
    }
});
Run Code Online (Sandbox Code Playgroud)

<div sibs>One</div>
<div sibs>Two</div>
<div sibs>Three</div>
Run Code Online (Sandbox Code Playgroud)

请注意,jQuery不是必需的.

fiddle

  • @ artdias90,如果你的页面上没有加载jQuery,Angular会使用自己内置的jQuery子集,称为"jQuery lite"或"jqLit​​e".`removeClass()`和`addClass()`是jqLit​​e的一部分,所以你不需要我上面展示的jQuery.有关详细信息,请参阅[angular.element](http://docs.angularjs.org/api/ng/function/angular.element). (9认同)

Alw*_*ner 9

这是您提供的jQuery示例的角度版本:

HTML:

<div ng-controller="FooCtrl">
    <div ng-click="selected.item='One'" 
    ng-class="{clicked:selected.item=='One'}">One</div>
    <div ng-click="selected.item='Two'" 
    ng-class="{clicked:selected.item=='Two'}">Two</div>
    <div ng-click="selected.item='Three'" 
    ng-class="{clicked:selected.item=='Three'}">Three</div>
</div>
Run Code Online (Sandbox Code Playgroud)

JS:

function FooCtrl($scope, $rootScope) {   
    $scope.selected = {
        item:""
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:您不必严格要求访问DOM.但是,如果您仍然想要,那么您可以编写一个简单的指令.如下所示:

HTML:

<div ng-controller="FooCtrl">
    <div ng-click="clicked()" get-siblings>One</div>
    <div ng-click="clicked()" get-siblings>Two</div>
    <div ng-click="clicked()" get-siblings>Three</div>
</div>
Run Code Online (Sandbox Code Playgroud)

JS:

yourApp.directive('getSiblings', function() {
   return {
      scope: true,
      link: function(scope,element,attrs){
         scope.clicked = function () {
            element.siblings('div').removeClass('clicked');
            element.addClass('clicked');
         }
      }
   }
});
Run Code Online (Sandbox Code Playgroud)

fiddle