Как я могу синхронизировать ширину элемента DOM в AngularJS?

0

Я хотел бы синхронизировать ширину элементов DOM таким образом, чтобы ширина всегда была наименьшей шириной, которая может вместить контент. Я могу успешно увеличить размер на $, наблюдая за увеличением (на основе ref1 и ref2), но я не могу понять, как уменьшить размер элемента после его увеличения.

Угловая директива:

app.directive('syncWidth', function () { //declaration; identifier master
  return {
    restrict: 'A',
    link: function (scope, element) {
      var linkElement = element[0];

      scope.$watch(
        function () {
          return (linkElement.scrollWidth);
        },
        function (newValue, oldValue) {
          if (newValue > oldValue) {
            scope.testWidth = {
              'min-width': newValue + 'px'
            }
          }
        },
        true
      );
    }
  };
});

HTML:

<input type="text" ng-model="myText">
<input type="text" ng-model="myText2">

<div sync-width="test" style="background-color: lightblue" ng-style="testWidth">1 [{{myText}}]</div>
<div sync-width="test" style="background-color: lightcoral" ng-style="testWidth">2 [{{myText2}}]</div>

Я предполагаю, что проблема состоит в том, что эти два элемента ссылаются на другой. Я думаю, что псевдокод будет выглядеть примерно так:

Set a global groupMinWidth variable
Detect element.contentWidth changed
If newContentWidth > groupMinWidth {
  groupMinWidth = newContentWidth;
}

If oldContentWidth == groupMinWidth {
  check all synchronized elements and set groupMinWidth to the largest contentWidth;
}

Спасибо за помощь.

  • 0
    не могу понять ваше требование ... есть два деления, один раз увеличив ширину одного из них, вы хотите увеличить другой до той же ширины? это правильно ? когда вы уменьшаете один из них, хотите ли вы уменьшить другой на ту же ширину?
  • 0
    Правильно, хотя содержимое будет меняться динамически (например, из полей ввода в моем примере). Мне удалось расширить каждый элемент при добавлении текста, но я хотел бы уменьшить их оба, если удаляю текст. Вот плункер того, что я имею до сих пор: plnkr.co/edit/ZsL3OnYwyglxEciSbXYp?p=preview
Показать ещё 1 комментарий
Теги:
angularjs-directive

1 ответ

0
Лучший ответ

Сейчас я работаю над plunkr, но пока не полностью работает: https://plnkr.co/edit/6XfGMzI1su8cpHjkyDWC?p=preview. Точка равна $, наблюдая за изменением текста, когда текст уменьшается, используйте общее значение/глобальное значение для записи и проверяйте, какая ширина является самой широкой, установите min-width для этого значения для обоих элементов.

=== РЕДАКТИРОВАТЬ ===

Наконец, выполните эту работу: https://plnkr.co/edit/c2FOu5LfPfGfnkU12KTG?p=preview

Таким образом, принцип заключается в следующем: мне нужно scrollWidth/offsetWidth переменную div для измерения scrollWidth/offsetWidth при изменении содержимого. Поэтому я добавляю новый вложенный div, который включает содержимое. Я сделал внутренний div как float и как только содержимое изменилось, я обновляю внешнюю ширину div, установив его width на внутреннюю ширину div. Ключевым моментом является то, что внутренний div является FLOAT, он может переполнять внешнюю границу div div, но выходной div отслеживает изменение содержимого, поэтому внешняя ширина div будет немедленно обновлена.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню