从指令

问题描述:

调用的ng-click方法不会刷新ng-repeat我正在创建将显示复合分层数据的可重用指令。从指令

在第一页加载时,会显示类似“服务器”/“软件”/“主板”(绑定到ng-repeat的项目数组)。如果用户点击“服务器”,则会显示可用的服务器,如“Ser1”/“Ser2”/“Ser3”。

html : 

     <div ng-app="myApp" ng-controller="myCtrl" ng-init="init()"> 
     <ul> 
      <li ng-repeat="item in items"> 
       <div my-dir paramitem="item"></div> 
       </li> 
     </ul> 
     </div> 

现在第一次正在加载项目,但点击任何项目都不会刷新ng-repeat。我在下面的控制器中检查了ng-click,“subItemClick”方法,并且它正在被解雇。但是项目集合没有被刷新。

http://plnkr.co/edit/rZk9cbEJU90oupVgcSQt

Controller: 

    var myApp = angular.module('myApp', []); 

    myApp.controller('myCtrl', ['$scope', function($scope) { 
     $scope.init = function() { 
      $scope.items = [{iname: 'server',subItems: ['ser1', 'ser2','ser3']} 
      ]; 
     }; 

     $scope.subItemClick = function(sb) { 
      if (sb.subItems.length > 0) { 
      var zdupitems = []; 
      for (var i = 0; i < sb.subItems.length; i++) { 
       zdupitems.push({ 
       iname: sb.subItems[i], 
       subItems: []    
       }); 
      } 
      $scope.items = zdupitems; 
    } 
     }; 

     }]) 
     .directive('myDir', function() { 
     return { 
      controller: 'myCtrl', 
      template: "<div><a href=# ng-click='subItemClick(paramitem)'>{{paramitem.iname}}</a></div>", 
      scope: { 
      paramitem: '=' 
      } 
      } 
     }); 

我期待像SER1/SER2项目绑定到NG-重复上点击“服务器”,但它没有发生。

任何帮助?

+0

您的指令使用隔离范围。在你传入它之前,在该范围内没有'subItemClick()' – charlietfl

我认为onClick搞砸了$ scope的方法定义。在这种情况下,呈现ngRepeat的$ scope实际上是$ scope。$ parent(不要使用$ scope。$ parent),并且你在错误的$ scope上创建一个新的items数组。

我意识到jsfiddle可能是你正在处理的一个愚蠢的例子,但是这种方法是错误的。如果您需要使用全局值,则应该从注入的服务中获取它,以便如果一个组件重置了一个值,并且每个值都反映出新值。 您可能不会将onClick元素放在单独的指令中。那有什么价值?