Javascript 在ng repeat之后运行的指令

Javascript 在ng repeat之后运行的指令,javascript,jquery,angularjs,angularjs-directive,Javascript,Jquery,Angularjs,Angularjs Directive,我有类似的问题,这一个,但我有指令和ng重复内 <my-dropdown> <li ng-repeat="item in items"><a>{{item.text}}</a></li> </my-dropdown> 为什么要直接使用jQuery添加ng hide?这可以由模型中的一个变量控制。@JoseM这样做比较容易,如果我需要使用ng hide,我将需要使用编译和半透明函数,但我不太确定如何使用。如果您向我们展示

我有类似的问题,这一个,但我有指令和ng重复内

<my-dropdown>
  <li ng-repeat="item in items"><a>{{item.text}}</a></li>
</my-dropdown>

为什么要直接使用jQuery添加ng hide?这可以由模型中的一个变量控制。@JoseM这样做比较容易,如果我需要使用ng hide,我将需要使用编译和半透明函数,但我不太确定如何使用。如果您向我们展示您现在拥有的功能以及您的最终目标,我们可能会为您找到更好的解决方案。@JoseM我添加了指令代码
return {
    restrict: 'E',
    require: '?ngModel',
    template: ['<div class="btn-group dropdown-button">',
               '  <div class="btn caption" ng-transclude></div>',
               '  <button class="btn dropdown-toggle" data-toggle="dropdown">',
               '    <span class="caret"></span>',
               '  </button>',
               '  <ul class="dropdown-menu" ng-transclude></ul>',
               '</div>'].join('\x0D'), // newline - peach replace newlines, gods only know why
    transclude: true,
    replace: true,
    compile: function(element, attrs, transclude) {
        // I've used compile because I wante to test the transclude function

        return function(scope, element, attrs, ngModelCtrl) {
            element.find('.caption li').attr('ng-hide', 'true');
            var selected_index = 0;
            function setValue(item) {
                var value = item.attr('value');
                ngModelCtrl.$setViewValue(value ? $interpolate(value)(scope) : item.index());
            }
            var caption = element.find('.caption');
            function update() {
                // for model with ng-repeat it return 1 item
                console.log(attrs.ngModel + ' ' + caption.find('li').length);
                caption.find('li').removeClass('ng-hide').not(':eq(' + selected_index + ')').addClass('ng-hide');
            }
            if (ngModelCtrl) {
                element.on('click', 'ul li', function() {
                    var self = $(this);
                    selected_index = self.index();
                    scope.$apply(function() {
                        setValue(self);
                    });
                    var selected = self.attr('selected');
                    if (selected) {
                        scope.$eval(selected);
                    }
                });

                if (!ngModelCtrl.$viewValue && attrs.placeholder) {
                    $('<li>' + attrs.placeholder + '</li>').appendTo(caption);
                    selected_index = caption.find('li').length-1;
                } else {
                    selected_index = ngModelCtrl.$viewValue || 0;
                }
                setValue(element.find('ul li:eq(' + selected_index + ')'));

                ngModelCtrl.$viewChangeListeners.push(function() {
                    scope.$eval(attrs.ngChange);
                    update();
                });
                ngModelCtrl.$render = function() {
                    if (!ngModelCtrl.$modelValue) {
                        selected_index = 0;
                        update();
                    } else {
                        $(element).find('ul li').each(function(i) {
                            var self = $(this);
                            var value = self.attr('value');
                            if (value && ngModelCtrl.$modelValue == $interpolate(value)(scope) ||
                                ngModelCtrl.$modelValue == i) {
                                selected_index = i;
                                update();
                                return false;
                            }
                        });
                    }
                };
            }
            update();
        };
    }
}