如何在角度js中处理范围

问题描述:

我正在为我的仪表板使用角度js。我有一个最小化按钮来最小化所有部件,然后每个部件都有自己的最小化按钮。我完成了下面的脚本它不工作。 当我点击小部件最小化按钮它最小化所有部件。但我只想最小化该小部件。如何在角度js中处理范围

var dashboard = angular.module("dashboard",['ui.bootstrap']); 
dashboard.controller('dash-control', ['$scope', function($scope) { 
    $scope.isHidden = false; 
    $scope.toggle = function(){ 
     $scope.isHidden = !$scope.isHidden; 
    }; 
    $scope.toggleonce= function() 
    { 
     if(this.isHidden === true) 
      this.isHidden = false; 
     else 
      this.isHidden = true; 
    }; 
}]); 

HTML代码类似如下:

<div class="contentpanel" ng-app="dashboard" ng-controller="dash-control as ctrl"> 
<button class="btn btn-white" type="button" ng-click="toggle()"><i class="fa fa-minus-square">  </i> </button> 

<div> 
<a href="" class="tooltips" ng-click="toggleonce()" title="Minimize Panel"><i class="fa fa-minus"></i></a> 
<div class="row tinychart" ng-show="isHidden">Contenr Heading 1</div> 
<div class="row tinychart" ng-hide="isHidden">Content Description 1</div> 

</div> 
<div> 
<a href="" class="tooltips" ng-click="toggleonce()" title="Minimize Panel"><i class="fa fa-minus"></i></a> 
<div class="row tinychart" ng-show="isHidden">Contenr Heading 2</div> 
<div class="row tinychart" ng-hide="isHidden">Content Description 1</div> 

</div> 
...... 
..... 
..... 
</div> 
+0

当我点击里面最小化toggleonce它最小化所有小部件。 – udhaya

+0

实现你想要的唯一方法是为这个功能创建一个指令,或者为每个链接标签使用一个不同的变量。这与'$ scope'没有任何关系,它与变量少于你想要追踪的项目有关。 – Claies

+0

如果我有更多的部件,那么我该怎么做。 – udhaya

我宁愿创建一个具有隔离范围指令表示内部部件。例如;

dashboard.directive('myWidget',function(){ 

    return { 
     scope:{}, 
     template:"<div>\r\n<a href=\"\" class=\"tooltips\" ng-click=\"toggleonce()\" title=\"Minimize Panel\"><i class=\"fa fa-minus\"><\/i><\/a>\r\n<div class=\"row tinychart\" ng-show=\"isHidden\">asdasdasd<\/div>\r\n<div class=\"row tinychart\" ng-hide=\"isHidden\">sdasdasd<\/div>\r\n\r\n <\/div>", 
     link:function($scope) 
     { 
       $scope.isHidden = false; 
       $scope.toggle = function(){ 
       $scope.isHidden = !$scope.isHidden; 
       }; 

      $scope.togglesingle = function() 
      { 
       if(this.isHidden === true) 
       this.isHidden = false; 
       else 
       this.isHidden = true; 
       }; 
      } 

      } 

}); 

然后在Html Body;

<div class="contentpanel" ng-app="dashboard" > 
<button class="btn btn-white" type="button" ng-click="toggle()"><i class="fa fa-minus-square">  </i> </button> 

<div my-widget></div> 
<div my-widget></div> 
</div> 

请注意,我没有运行并检查示例。我希望你明白了。

编辑: ng-repeat会循环数组(列表)并将每个元素初始化为'item'变量。您可以将该数据传递给您的指令。检查更新的代码。

+0

它不可能为我的应用程序。因为每个小部件都加载了一些内容。我必须动态地隐藏和显示内容时,点击最小化特定的小工具/最小化所有小工具 – udhaya

+0

您可以绑定来自外部作用域的数据,因此每个小工具都会获得它自己的数据。然后在小部件内部,您可以根据需要使用该数据。我编辑了答案来反映这一点 – erandac