Ionic 2 анимации (с Angular2) => цвета из variable.scss, `Не удалось выполнить 'animate' для 'Element': частичные ключевые кадры не поддерживаются

Этот вопрос похож на этот, но достаточно отличается, чтобы создать новую тему.

Работая над угловой анимацией 2, я не мог понять, как получить доступ к переменным цветов, которые находятся в [project]\src\theme\variable.scss.

Допустим, у [project]\src\theme\variable.scss это сверху:

$colors: (
  primary:    #387ef5,
  secondary:  #32db64,
  ...
);

Теперь в компоненте Ionic 2/Angular 2, в @Component аннотация, у меня есть что-то вроде этого:

animations: [
     trigger('changeBackgroundColor', [
        state('active', style({
            backgroundColor: [Some statement to define the active color]
        })),
        state('inactive', style({
            backgroundColor: '#32db64' 
        })),
        transition('* => inactive', animate('800ms ease')),
        transition('* => active', animate('800ms ease')),
        transition('inactive=> active', animate('800ms ease')),
        transition('active=> inactive', animate('800ms ease')),
    ]),
 ]

Теперь я попробовал следующее, чтобы установить backgroundColor в поле [Some statement to define color active]:

  • '#387ef5'=> ЭТО РАБОТАЕТ;
  • '($colors,primary)' => НЕ РАБОТАЕТ
  • 'color($colors,primary)' => НЕ РАБОТАЕТ
  • 'primary' => НЕ РАБОТАЕТ

Каждый раз, когда он не работает, он выдает ошибку: Failed to execute 'animate' on 'Element': Partial keyframes are not supported.;

Я удивлен, что не смог получить доступ к переменным в "variable.scss", потому что оператор для определения backgroundColor встроен в style({}) заявление. И я вообразил, что в этом style({}) Можно использовать обычный CSS, в отличие от другой темы, на которую я ссылаюсь, где целью является доступ к значениям CSS в TypeScript.

Кто-нибудь имеет ответ, или может просветить меня по этому поводу?

1 ответ

Решение

Вы не можете получить доступ к переменным SCSS в Javascript напрямую. Всякий раз, когда вы запускаете процесс сборки, сценарии SCSS компилируются в CSS, и переменные не поддерживаются, а заменяются их фактическими значениями по всему сценарию.

Если вы хотите получить доступ к значениям переменных, вы можете добавить невидимые элементы в DOM, которые имеют класс, который делает их цвет определенной переменной SCSS, например, $ primary, а затем получить доступ к этим значениям в Javascript. Но это уродливый обходной путь.

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