как я начинаю использовать повышение

попробуйте этот код, я переписал некоторые коды

import {
  AfterViewInit,
  Directive,
  ElementRef,
  HostListener,
  Input,
  OnInit,
  Renderer2,
  OnDestroy
} from '@angular/core';

@Directive({
  selector: '[appInputmaxLength]'
})
export class InputmaxLengthDirective implements OnInit, AfterViewInit, OnDestroy {
  @Input() appInputmaxLength: string;
  private currentValue = 0;
  countDiv: HTMLDivElement;
  parent: any;

  constructor(private el: ElementRef<HTMLInputElement>, private renderer: Renderer2) {}

  @HostListener('keyup') isChange() {
    const countNb = this.el.nativeElement.value.length + 1;
    if (countNb <= 1) {
      this.currentValue = 0;
      this.updateCount();
    } else {
      this.currentValue = countNb;
      this.updateCount();
    }

    console.log('test: ', this.el.nativeElement.value.length + 1);
  }

  ngOnInit() {
    this.renderer.setAttribute(this.el.nativeElement, 'maxLength', this.appInputmaxLength);
  }

  ngOnDestroy() {
    this.renderer.removeChild(this.parent, this.countDiv);
    this.renderer.destroyNode(this.countDiv);
  }

  updateCount() {
    this.countDiv.innerText = this.currentValue + ' / ' + this.appInputmaxLength;
  }

  ngAfterViewInit() {
    this.countDiv = this.renderer.createElement('div');
    this.parent = this.renderer.parentNode(this.el.nativeElement);
    this.renderer.appendChild(parent, this.countDiv);
    this.updateCount();
  }
}

в этом коде, я использую рендерер для создания элемента div и обновления его значения везде, где изменяется currentValue.

Также вы должны уничтожить его при уничтожении директивы, чтобы избежать утечки памяти.

11
задан Community 23 May 2017 в 12:17
поделиться

7 ответов

Повышение имеет невообразимое число библиотек. Легкие для начала работы на

  • noncopyable
  • массив
  • circular_buffer
  • foreach
  • операторы (один из моих любимых)
  • smart_ptr
  • date_time

Более усовершенствованные включают

  • лямбда
  • связать
  • iostreams
  • сериализация
  • потоки

Привыкание для повышения занимает время, но я уверяю Вас, что оно сделает Вашу жизнь намного лучше. Плюс, смотря на то, как библиотеки повышения кодируются, поможет Вам поправиться при кодировании C++, особенно шаблоны.

Вы упомянули то, что должно Вы искать прежде, чем попробовать повышение. Я соглашаюсь, что функциональные объекты являются большой вещью исследовать. Кроме того, удостоверьтесь, что искали о шаблонном программировании. Типичная проблема удостовериться Вы знаете, когда использовать typename спецификатор для зависимых типов. По большей части, однако, библиотеки очень хорошо документируются с примерами и ссылочными материалами.

9
ответ дан 3 December 2019 в 04:14
поделиться

Изучение повышения обсуждено здесь. Что касается функций языка, которые полезны? Все они. C++ является опасным языком, чтобы использовать, если Вы не знаете достаточно его. RAII, функторы/функциональные объекты и шаблоны, вероятно, покрывают самые важные аспекты. Повышение разработано так же к STL, так зная, что Ваша стандартная библиотека важна. Само повышение использует много шаблонного метапрограммирования, но как пользователь библиотеки, Вам не часто будет нужно это (если Вы не начнете играть с Повышением. MPL)

Ошибки, связанные с управлением памятью, являются хорошим индикатором, что это - C++, а не Повышение, на котором необходимо повторить. Методы для обработки памяти безопасно известны, и не характерны для Повышения. (За очевидным исключением интеллектуальных указателей Повышения). RAII является, вероятно, самым важным понятием для понимания для контакта с этим видом проблем.

6
ответ дан 3 December 2019 в 04:14
поделиться

Каковы ключевые функции языка, на которых я должен полировать эффективно извлечь выгоду из использования повышения и сократить кривую обучения?

  • Шаблоны
  • Функторы
  • Исключения
  • STL
    • Итераторы
    • Алгоритмы
    • Контейнеры

... среди других.

есть ли любые учебные руководства и 101 ресурс, на которые я могу быстро посмотреть просто получить ощущение и понимающий при использовании повышения.

Повышение хорошо документируется. Запустите здесь.

Существует слишком много библиотек, чтобы потеряться. Я сказал бы, запускаются с чего-то простого, возможно, интеллектуальные указатели или Повышение. Тест (Платформа модульного теста) - который быстро поможет Вам начать. Кроме того, попытайтесь думать о проблеме, которую Вы не можете решить с STL легко. Затем ищите документацию Повышения или сообщение здесь.

Если Вы довольны функциональным программированием, смотрят на библиотеки MPL/Lambda.

4
ответ дан 3 December 2019 в 04:14
поделиться

Первый звон IMO является интеллектуальными указателями. Интеграция в новый код проста, и обычно не проблема для существующего кода. Они делают управление памятью легким, и работа для многих других ресурсов, также.

C++ дает Вам питание управлять Вашей собственной памятью, интеллектуальные указатели позволяют Вам (главным образом) крыло это, когда Вы не должны.

Второе было бы - как Вы упомянули - функциональные объекты, они преодолевают большой разрыв в C++, который традиционно решен посредством наследования, которое является к сильной из связи во многих случаях.

У меня есть только небольшой опыт с повышением вне этих двух, но большая часть остатка является довольно "ситуационной" - Вы можете или, возможно, не нуждаетесь в нем. Получите обзор по библиотекам и посмотрите то, в чем Вы нуждаетесь.

boost::any и boost::variant мило с вашей стороны потребность различный тип данных, с двумя разными подходами.

boost::regex если Вам нужен некоторый текстовый парсинг.

boost::thread и boost::filesystem справка Вы пишете портативный код. Если у Вас уже есть хорошая платформа определенные библиотеки, Вам, возможно, не понадобились бы они - но они лучше, чем API или уровень C++ в любом случае.

Возможно, Вам нравится, когда мое введение повышает интеллектуальные указатели и довольно неортодоксальное использование для них.

4
ответ дан 3 December 2019 в 04:14
поделиться

Попробуйте книгу Björn Karlsson: Вне Библиотеки Стандарта C++: Введение в Повышение. Его довольно простое и легкое для схватывания. Я считал это после того, как я закончил Scott Meyers три книги C++ (эффективный ряд).

1
ответ дан 3 December 2019 в 04:14
поделиться

После чтения Вне Библиотеки Стандарта C++: Введение в Повышение, я рекомендовал бы небрежно просмотреть документацию относительно boost.org, только понять то, что доступно. Можно сделать глубокое погружение в определенную библиотеку повышения, когда это похоже на подходящий вариант для конкретного приложения.

1
ответ дан 3 December 2019 в 04:14
поделиться

Я думаю, что shared_ptr должен быть самым легким местом для запуска. Начните использовать его inplaces простого указателя или auto_ptr типов данных.

Можно также изучить weak_ptr.

0
ответ дан 3 December 2019 в 04:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: