#angularjs #directive
#angularjs #директива
Вопрос:
Я написал директиву, чтобы исправить заголовок таблицы сверху при прокрутке. Все работает нормально. Таблица также сортируется. Когда пользователь нажимает на заголовок столбца, список сортируется по этому столбцу, а когда пользователь нажимает на активный столбец, сортировка меняется на противоположную. Все работает так, как я ожидал. Но когда я нажимаю на фиксированный заголовок, функция сортировки вызывается дважды (вы можете увидеть это в консоли).
Я не могу найти источник проблемы и способы ее решения. Вот мой plunkr. Заранее спасибо за любую помощь…
Кстати, если я удалю коды компиляции (
var linkFn = $compile(fixedHeader);
linkFn(scope);
), он работает нормально. Но тогда ng-class не применяется, потому что я думаю, что он не может получить доступ к переменным контроллера.
Редактировать:
Я обновил plunkr, чтобы показать мою проблему с ng-классом при удалении кодов компиляции.
Ответ №1:
ваша проблема в том, что когда вы делаете это
fixedHeader = header.clone(true).addClass("header-fixed").width(header.width());
а затем выполняет
var linkFn = $compile(fixedHeader);
linkFn(scope);
вы копируете не только html, но и привязки, поэтому вам не нужно его компилировать и снова связывать, но поскольку вы это делаете, ваши события выполняются дважды, потому что они связаны дважды. итак, вы можете продолжить и удалить $compile или назначить header.html () содержимое вашего фиксированного заголовка и скомпилируйте его.
Комментарии:
1. Большое спасибо. Я узнал это, но, к сожалению, это не решение. Проверьте мое редактирование…
2. что я должен здесь увидеть? для меня выглядит одинаково с компиляцией и без нее
3. ng-class не применяется к fixedHeader без компиляции.
Ответ №2:
Попробуйте angular.copy():
fixedHeader = angular.copy(header).addClass("header-fixed").width(header.width());