使用AngularJS中的一个函数控制两个span标记

时间:2015-08-11 14:38:08

标签: javascript angularjs show-hide

我有两个span标签和两个p标签,例如:

<span class="span1" ng-click="show()">Span_1</span>
<p class="p1" ng-show="var1">P_1</p>
<span class="span2" ng-click="show()">Span_2</span>
<p class="p2" ng-show="var1">P_2</p>

我正在使用AngularJS,所以我想要实现的是制作一个单独的函数,如上面显示的show()来切换两个p标签我该如何实现呢?这是我的JavaScript代码:

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.var1 = false;
    $scope.show = function() {
        $scope.var1 = $scope.var1 === false ? true: false;
    };
});

单击Span_1后,只有与其对应的p标签应与Span_2相同,我只能通过一个功能来实现。

以下是Plunker:http://plnkr.co/edit/fzgpV68Q7UnHGHmHffZZ?p=preview

3 个答案:

答案 0 :(得分:1)

您可以将跨度编号作为参数传递给函数,而不是基于参数更改$scope.var1$scope.var2。功能看起来像?:

function show(varParam) { 
    if (varParam === 1) {
        $scope.var1 = !$scope.var1; //flip value    
    } else {
        $scope.var2 = !$scope.var2;
    }
}

然后在模板中你在函数调用期间执行param:

ng-click="show(1)"

Working Plunkr

答案 1 :(得分:1)

从html传递变量。您还可以添加类似ng-class等的案例。

//角度代码(js)

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  $scope.variableList = [{state:true},{state:false}];
    $scope.show = function(what,where) {
        switch(what){
          case 'display':
            return $scope.variableList[where].state;
            break;
          case 'click':
            $scope.variableList[where].state = !$scope.variableList[where].state;
            break;
          case 'class':
            return ($scope.variableList[where].state ? 'active' : '');
            break;
        }
    };
});

使用(HTML):

<div ng-app="myApp" ng-controller="myCtrl">
  <div ng-repeat="item in variableList">
    <span ng-class="show('class',$index);" ng-click="show('click',$index)">Span_{{$index+1}}</span>
    <p ng-class="show('class',$index);" ng-show="show('display',$index)">P_{{$index+1}}</p>
  </div>
</div>

答案 2 :(得分:1)

您还可以编写切换方法来切换跨度的可见性。 前 -

<html ng-app='myApp' >
  <body ng-controller="myCtrl">
<span class="span1" ng-click="toggle()">Span_1</span>
<p class="p1" ng-show="var">P_1</p>
<span class="span2" ng-click="toggle()">Span_2</span>
<p class="p2" ng-show="!var">P_2</p>
    </body>
  </html>

JS -

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.var = true;
    $scope.toggle = function() {
        $scope.var = !$scope.var;
    };
});