2015-05-07 3 views
0

У меня есть большая Угловая страница со 100 + строками данных, каждая с кнопкой в ​​последнем столбце, которая устанавливает радиомодель Bootstrap, на основе которой вы нажимаете кнопку.Пакет триггеров Угловой бутстрап нажмите кнопку события

//.... 
<tr> 
<td> 
data1 
</td> 
<td> 
data2 
</td> 
<td>  
<div ng-controller="pickSource" class="btn-group " role="group" aria-label="..."> 
     <label class="btn btn-info btn-xs pickSourceButton takeXxxBtn"  
       ng-model="radioModel" 
       btn-radio="'yyy'" > 
      Approve 
     </label> 
     <label class="btn btn-warning btn-xs pickSourceButton takeYyyBtn"       
      ng-model="radioModel" 
      btn-radio="'yyy'" > 
      Reject 
     </label> 
     <label class="btn btn-danger btn-xs pickSourceButton noActionBtn" 
       ng-model="radioModel" 
       btn-radio="'noAction'" > 
      Hold 
     </label> 
    </div> 
</td> 
</tr> 
//... many of these, the picksource block is actually a directive but i simpified here 

Кнопка выглядит так: (утверждение | отклонять | удерживайте)

контроллер для этой кнопки, как это:

controller('pickSource', function ($scope, $log) { 
    $scope.radioModel = "noAction"; 
    $scope.$watch('radioModel', function(newValue, oldValue) { 
     if (newValue !== oldValue) { 
      $log.log('emitting event'); 
      //even if i remove this below it is slow 
      $scope.$emit('pickSourceButtonDidChange',someDATA); 
     } 
    }); 
}); 

У меня есть кнопка работы партии, которая будет выбирать одинаковое значение (т. е. выбрать источник для всех строк) для каждой строки.

В настоящее время я запуская события так:

//inside bootstrap dropdown 
if(source == "xxx"){ 
    el = document.getElementsByClassName('takexxxBtn'); 
} 
else if (source == "yyy"){ 
    el = document.getElementsByClassName('takeyyyBtn'); 
} 
else{ 
    el = document.getElementsByClassName('noActionBtn'); 
} 
$timeout(function() { 
    angular.element(el).triggerHandler('click'); 
}, 0); 

Однако, я получаю очень плохую производительность от этого. Я предполагаю, что это связано с тем, что в событиях кликов есть довольно дорогая серия действий (я даже вынул весь код, который запускается при нажатии кнопки и по-прежнему получает тот же рейтинг производительности), но мне интересно, есть ли какая-либо альтернатива , Я не могу просто изменить базовые данные, которые запускает триггер, потому что мне также нужен интерфейс для изменения (нужна кнопка, чтобы она выглядела так, как будто она нажата и т. Д.)

Есть ли способ сделать это?

+1

Не могли бы вы назвать функцию, с которой событие щелчка переводилось в угловое снова и снова? Вставьте режим вашего кода dom. –

+0

Отредактировано, чтобы добавить больше контекста к вопросу. Кроме того, то, что вы упомянули, это именно то, что я делаю ... но это очень медленно – maschwenk

+2

Нет, вы не делаете то, что я описываю, вы на самом деле запускаете кучу событий щелчка. То, что вы должны делать, это обновление всех моделей. –

ответ

1

Использование решения Matthew Berg (idk как связать с вашим профилем: S), я выбрал событие от контроллера кнопки пакетного действия к родительскому контроллеру, поймал событие в родительском контроллере, а затем передал изменения модели до все контроллеры кнопок начальной загрузки. Это отлично работало.

Thanks Matt

+1

Выглядит хорошо, рад помочь. –

Смежные вопросы