Несколько селекторов директив - найти, какой селектор использовался в шаблоне - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть два селектора dirA и dirNotA для моей директивы. Директива должна продолжаться в зависимости от используемого селектора. Есть ли способ определить, какой селектор был использован в директиве?

У меня нет 1011 *, чтобы иметь несколько директив или директиву с параметрами. Я sh хочу иметь одну директиву с несколькими селекторами и определять порядок действий на основе селектора, используемого в шаблоне.

Примерно так

@Directive({
  selector: '[dirA], [dirNotA]`
})
class DirectiveA implement OnInit {
  ngOnInit() {
    // here we detected which selector was used
    if (dirASelector) {
      ...
    }

  }
}

Любые идеи, как можно получить эту информацию в самой директиве?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Вы можете использовать ElementRef и проверить селектор в его атрибутах.

Директива

import { Directive, OnInit, ElementRef } from '@angular/core';

@Directive({
  selector: '[dirA], [dirNotA]'
})
class DirectiveA implement OnInit {
  constructor(private _elRef: ElementRef) { }

  ngOnInit() {
    if ((this._elRef.nativeElement.attributes).hasOwnProperty('dirA')) {
      // selector is 'dirA'
    } else if ((this._elRef.nativeElement.attributes).hasOwnProperty('dirNotA')) {
      // selector is 'dirNotA'
    }
  }
}

Рабочий пример: Stackblitz

0 голосов
/ 25 февраля 2020

Вы можете использовать наследование.

class DirectiveAOrNotA implements OnInit {
// common logic here
}

@Directive({
  selector: '[dirA]`
})
export class DirectiveA extends DirectiveAOrNotA {
// differences here
}

@Directive({
  selector: '[dirNotA]`
})
export class DirectiveNotA extends DirectiveAOrNotA {
// differences here
}

...