Справочник по электронной почте SQL (.com)

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

@Component({
  selector: 'es-outline-tree',
  // ...
})
export class OutlineTreeComponent implements OnInit {
  treeControl: FlatTreeControl<FlatTreeNode>;

  // other code...

  /**
   * Recursively expand all parents of the passed node.
   */
  expandParents(node: FlatTreeNode) {
    const parent = this.getParent(node);
    this.treeControl.expand(parent);

    if (parent && parent.level > 0) {
      this.expandParents(parent);
    }
  }

  /**
   * Iterate over each node in reverse order and return the first node that has a lower level than the passed node.
   */
  getParent(node: FlatTreeNode) {
    const { treeControl } = this;
    const currentLevel = treeControl.getLevel(node);

    if (currentLevel < 1) {
      return null;
    }

    const startIndex = treeControl.dataNodes.indexOf(node) - 1;

    for (let i = startIndex; i >= 0; i--) {
      const currentNode = treeControl.dataNodes[i];

      if (treeControl.getLevel(currentNode) < currentLevel) {
        return currentNode;
      }
    }
  }
}

Я планирую создать свой собственный FlatTreeControl (путем расширения Angular CDK FlatTreeControl) и перемещения эта логика там.

UPDATE

Я переместил вышеуказанную логику в свою собственную реализацию FlatTreeControl:

import { FlatTreeControl } from '@angular/cdk/tree';

export class CustomTreeControl<T> extends FlatTreeControl<T> {
  /**
   * Recursively expand all parents of the passed node.
   */
  expandParents(node: T) {
    const parent = this.getParent(node);
    this.expand(parent);

    if (parent && this.getLevel(parent) > 0) {
      this.expandParents(parent);
    }
  }

  /**
   * Iterate over each node in reverse order and return the first node that has a lower level than the passed node.
   */
  getParent(node: T) {
    const currentLevel = this.getLevel(node);

    if (currentLevel < 1) {
      return null;
    }

    const startIndex = this.dataNodes.indexOf(node) - 1;

    for (let i = startIndex; i >= 0; i--) {
      const currentNode = this.dataNodes[i];

      if (this.getLevel(currentNode) < currentLevel) {
        return currentNode;
      }
    }
  }
}
0
задан tadman 18 January 2019 в 20:30
поделиться

1 ответ

Это не то, как LIKE работает, и как SELECT работает. Вместо этого:

SELECT first_name, last_name FROM customerform WHERE email LIKE '%.com'

Здесь % означает «начинается с» или «бла-бла-бла» на более случайном языке.

Помните, что такие вещи, как SELECT полностью документированы, и нет ничего постыдного в том, чтобы проверить, как они работают, прежде чем выполнять ваше утверждение. Нам всем нужно проверить, что мы делаем это правильно.

0
ответ дан tadman 18 January 2019 в 20:30
поделиться
Другие вопросы по тегам:

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