Как отключить опцию выпадающего коврика от одного до двух?

Относительный импорт происходит всякий раз, когда вы импортируете пакет относительно текущего скрипта / пакета.

Рассмотрим следующее дерево, например:

mypkg
├── base.py
└── derived.py

Теперь ваш derived.py требует что-то из base.py. В Python 2 вы можете сделать это так (в derived.py):

from base import BaseThing

Python 3 больше не поддерживает это, поскольку он не является явным, хотите ли вы «относительного» или «абсолютного» base. Другими словами, если в системе был установлен пакет Python с именем base, вы бы ошибались.

Вместо этого он требует, чтобы вы использовали явный импорт , который явно указать расположение модуля на основе пути. Ваш derived.py будет выглядеть так:

from .base import BaseThing

Ведущий . говорит «import base из каталога модуля»; Другими словами, .base отображается на ./base.py.

Аналогичным образом существует префикс .., который поднимается вверх по иерархии каталогов, такой как ../..mod отображением на ../mod.py), и затем ..., который идет на два уровня вверх (../../mod.py) и т. д.

Пожалуйста, обратите внимание, что относительные пути, перечисленные выше, относились к каталогу, в котором находится текущий модуль (derived.py), не текущий рабочий каталог.


@BrenBarn уже объяснил случай импорта звезды. Для полноты, я должен будет сказать то же самое;).

Например, вам нужно использовать несколько функций math, но вы используете их только в одной функции. В Python 2 вам разрешили быть полу-ленивым:

def sin_degrees(x):
    from math import *
    return sin(degrees(x))

Обратите внимание, что он уже запускает предупреждение в Python 2:

a.py:1: SyntaxWarning: import * only allowed at module level
  def sin_degrees(x):

В современном коде Python 2 вы должны и в Python 3 вы должны сделать либо:

def sin_degrees(x):
    from math import sin, degrees
    return sin(degrees(x))

, либо:

from math import *

def sin_degrees(x):
    return sin(degrees(x))
3
задан Prashant Pimpale 21 January 2019 в 07:41
поделиться

2 ответа

Значение интерпретируется как число. Вы можете сравнить параметры времени в атрибуте disabled с помощью строки:

<mat-option [disabled]="time2.toString() === timeSelection1.toString()" *ngFor="
  let time2 of resTimePeriodData
 " [value]="time2">{{ time2 }}</mat-option>

Я бы порекомендовал использовать только цифры.

0
ответ дан De Wet van As 21 January 2019 в 07:41
поделиться

Я бы сделал что-то вроде этого:

HTML:

<div class="row">
    <div class="col-md-2 ">
        <!-- DROP DOWN FOR CURRENT TIME PERIOD -->
        <mat-form-field>
            <mat-select [(value)]="selected" placeholder="Current Time Period" multiple name="select1" [(ngModel)]="timeSelection1">
                <mat-option *ngFor="let time1 of resTimePeriodData" [value]="time1">{{ time1 }}</mat-option>
            </mat-select>
        </mat-form-field>
    </div>
</div>
<div class="row">
    <div class="col-md-2">
        <mat-form-field>
            <!-- DROP DOWN FOR PREVIOUS TIME PERIOD -->
            <mat-select placeholder="Previous Time Period" multiple name="select2" [(ngModel)]="timeSelection2">
                <mat-option *ngFor="let time2 of resTimePeriodData" [value]="time2" [disabled]="isDisable(time2)">{{ time2 }}</mat-option>
            </mat-select>
        </mat-form-field>
    </div>
</div>

TS:

isDisable(obj) {
   var index = this.selected.indexOf(obj);
   if (index == -1) {
      return false;
   }
   else {
     return true;
   }
}

Вы также можете попробовать улучшить существующий код! [117 ]

Stackblitz

0
ответ дан Prashant Pimpale 21 January 2019 в 07:41
поделиться
Другие вопросы по тегам:

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