У меня есть две вкладки Bootstrap на странице, и на каждой вкладке отображается список. Я хочу, чтобы каждый элемент списка был квадратом и написал эту директиву AngularJS, чтобы установить высоту каждого элемента списка равным его динамической ширине, контролируемой Bootstrap:
app.directive('squareDiv', function () {
return {
restrict: "A",
link: function (scope, element,attr) {
scope.getWidth = function () {
return element.width();
};
scope.$watch(scope.getWidth, function (width) {
element.css({
height: width + 'px'
});
}, true);
}
};
});
Когда я загружаю эту страницу, элементы списка первой вкладки отображаются как квадраты, что означает, что директива работает. Но когда я нажимаю на другую вкладку, элементы списка имеют высоту по умолчанию 100 px. Когда я вернусь к первой вкладке, даже элементы списка теперь имеют высоту по умолчанию.
Что здесь происходит?
ОБНОВЛЕНИЕ 1:
Вот ссылка на плункер, который иллюстрирует эту проблему: http://plnkr.co/edit/Pc7keuRXR9R3U6AhZmFE?p=preview
ОБНОВЛЕНИЕ 2:
Plunker с Bootstrap заменен на UI-Bootstrap, который по-прежнему имеет ту же проблему: http://plnkr.co/edit/rLE1wUAHKzJP6FVnGF6b?p=preview
ОБНОВЛЕНИЕ 3:
Plunker с часами для переключателя табуляции вместо изменения ширины (обходной путь для исходной проблемы с часовым механизмом не работает правильно, необходимо будет использовать отдельную директиву для адаптации к изменениям ширины из-за изменения размера окна): http://plnkr.co/edit/Y4Goe0cexq979JsIcBxl?p=preview
Я все равно хотел бы понять, почему часы ширины перестают корректно работать после переключения табуляции.