Как расширить компонент в Typescript и выяснить необходимые аргументы? Пример использования: Угловой - расширяющаяся боковая навигация по коврику

Задний план:

Динамика Angular Material Design компонент mat-side-nav такова, что требует следующей структуры:

<mat-sidenav-container>
  <mat-sidenav>
  </mat-sidenav>
  <mat-sidenav-content>
  </mat-sidenav-content>
</mat-sidenav-container>

<mat-sidenav> и <mat-sidenav-content> должны быть прямыми потомками родительского компонента <mat-sidenav-container>. Поэтому, если я хочу создать повторно используемую боковую навигацию в приложении с определенными элементами списка, мне придется сделать следующее:

<mat-sidenav-container>
  <mat-sidenav>
   <app-sidenav></app-sidenav><!--I've just been added-->
  </mat-sidenav>
  <mat-sidenav-content>
  </mat-sidenav-content>
</mat-sidenav-container>

Попытка решения:

Поэтому я пытаюсь расширить компонент <mat-sidenav> в моем компоненте app-sidenav, чтобы его можно было легко повторно использовать во всем приложении, например:

export class SideNavComponent extends MatSidenav implements AfterContentInit { 
//..

constructor() {
  super();
}

Чтобы я мог просто сделать:

<mat-sidenav-container>
  <app-sidenav> <!--I'm now here instead of <mat-sidenav> -->
  </app-sidenav>
  <mat-sidenav-content>
  </mat-sidenav-content>
</mat-sidenav-container>

Проблема: Компилятор машинописного текста будет жаловаться на error TS2554: Expected 6 arguments, but got 0. при попытке расширить MatSidenav.

Вопрос:

  1. Зачем, расширяя MatSideNav, мне теперь потребуется 6 аргументов?
  2. Есть ли у меня способ узнать, что это за 6 аргументов в этой ситуации и в других подобных ситуациях машинописного текста относительно того, какими должны быть аргументы?

Спасибо, и любые предложения более чем приветствуются.

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

Estus Flask 24.04.2018 05:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
302
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам понадобятся эти 6 параметров. Вы можете проверить их в исходном коде Angular Material2. Что до того, почему, это основное правило наследия. Когда вы вызываете super, вы в основном вызываете конструктор родительского класса (который в этом случае требует 6 параметров)

              private _elementRef: ElementRef,
              private _focusTrapFactory: FocusTrapFactory,
              private _focusMonitor: FocusMonitor,
              private _platform: Platform,
              private _ngZone: NgZone,
              @Optional() @Inject(DOCUMENT) private _doc: Document

Другие вопросы по теме