0

我正在开发我的第一个AngularJS应用程序,并遇到了这个问题与jQuery查找功能。基本上我试图做的是我有一个自定义的HTML组件。它包含使用ng-repeat指令的按钮列表。每个都有它自己的ng-click监听器,在它的回调函数中,我想查找所有的app-item元素,但是很遗憾,它只能返回第一个元素。AngularJS ng-repeat jQuery查找返回只有一个元素

我认为这种情况我应该使用链接,但我不能自己来。 APP-screen.html的

部分:

<div>  
    <div ng-repeat="error in _errorData.errors"> 
     <button class="app-item" ng-click="_onApplicationContainerClick($event)"> 
      <div class="col-xs-4"> 
       {{error.date}} 
      </div> 
      <div class="col-xs-4"> 
       {{error.errorID}} 
      </div> 
      <div class="col-xs-3"> 
       {{error.message}} 
      </div> 
      <div class="col-xs-1"> 
       <span class="glyphicon glyphicon-collapse-down"></span> 
      </div> 
     </button> 
    </div> 
</div> 

AppScreen指令:

angular.module('ErrorViewer').directive('appScreen', function() { 
    return { 
     restrict: 'E', 
     templateUrl: 'src/view/scene/app-screen.html', 
     controller: 'AppScreenController' 
    }; 
}); 

AppScreenController的部分:

$scope._onApplicationContainerClick = function (e) { 
    // some executions 
    _collapseErrorData(); 
}; 

var _collapseErrorData = function() { 
    var elems = $element.find('.app-item'); 
    // Should return array of ng-repeated elements! 
} 
+0

并$元素来自何处而来?你试过angular.element.find('。app-item')吗? – maurycy

+0

它只是控制器的一部分,它来自控制器声明: 'angular.module('Smth').controller('AppScreenController',['$ document','$ scope','$ element', function ($ document,$ scope,$ element){' – MyFantasy512

+0

ok,那么这个注入的'$ element'是什么?它是jQuery,jQuery lit还是angular.element? – maurycy

回答

2

NG重复是在呈现阶段呈现(当$ watch处理程序正在执行时)。在编译和链接阶段,您只能访问模板。这就是你只看到一个元素的原因。

挂接到后呈现阶段,您可以用$超时:

app.controller('AppScreenController', function($scope, $timeout) { 
    var _collapseErrorData = function() { 
     $timeout(function() { 
      var elems = $element.find('.app-item'); 
      // Should return array of ng-repeated elements! 
     }); 
    } 
}); 
+0

从我的角度来看,它应该在ng-repeat监视表达式发生了变化,而在我的案例中,_collapseErrorData没有同时执行(因为你不能单击未被重新排列的元素),那么这些元素不应该在舞台上吗? – MyFantasy512

相关问题