2016-08-29 92 views
1

我使用NG-重复生成一些元素的元素...NG单击只影响它的内部

<div class="form-block" ng-repeat="form in formblock | filter:dateFilter"> 

    <div ng-click="showResults()" ng-if="repeat == true" class="drop">{{ form.form_name }} <span class="caret"></span></div> 

    <div ng-show="results" class="formURL">{{ form.url }}</div> 
    <div ng-show="results" class="formCount">{{ form.count }}</div> 
    <div ng-show="results" class="formSubmit">{{ form.submit }}</div> 

</div> 

正如你所看到的,ng-click="showResults()"切换其他元素的显示。问题是,我只想要ng-click切换同一容器内的元素,而不是切换所有元素。

简而言之,我只希望点击事件影响调用函数的同一个容器中的元素,我该怎么做?

这是在我的控制器showResults ...

$scope.showResults = function(){ 
    return ($scope.results ? $scope.results=false : $scope.results=true) 
} 

回答

2

ng-repeat为您提供了一个特殊变量(除非您已经有身份):$index

利用这一点,你可以存储(而不是单个布尔值)的对象$index => toggleState在您的角度代码:

$scope.hiddenHeroes = {}; 

$scope.toggleHero = function (idx) { 
    $scope.hiddenHeroes[idx] = !$scope.hiddenHeroes[idx]; 
} 

而在你的HTML:

<div ng-repeat="hero in heroes"> 
    <div class="hero" ng-hide="hiddenHeroes[$index]"> 
    <h1> 
    {{hero}} 
    </h1> 
    All you want to know about {{hero}}! 
    <br /> 
    </div> 
    <a ng-click="toggleHero($index)">Toggle {{hero}}</a> 
</div> 

See it live on jsfiddle.net!

0

您可以使用$索引索引项/容器,并显示相应的结果:

<div ng-click="showResults($index)" ng-if="repeat == true" class="drop">{{ form.form_name }} <span class="caret"></span></div> 
<div ng-show="results[$index]" class="formURL">{{ form.url }}</div> 
<div ng-show="results[$index]" class="formCount">{{ form.count }}</div> 
<div ng-show="results[$index]" class="formSubmit">{{ form.submit }}</div> 

而且你的函数

$scope.showResults = function(index){ 
    return ($scope.results[index] ? $scope.results[index]=false : $scope.results[index]=true) 
}