Подтвердить что ты не робот

Как изменить цвет тоста зависит от типа сообщения в Angular материала $mdToast?

При использовании $mdToast.simple().content("some test") отображается тост с черным цветом. как я могу изменить этот цвет на красный, желтый и т.д., зависит от типа сообщений об ошибках, таких как ошибка, предупреждение и успех.

Аналогичный вопрос .

4b9b3361

Ответ 1

EDIT:
Для правильной реализации используйте rlay3s решение ниже:)!

Устаревшие:
У меня возникли проблемы с отображением пользовательского текста с помощью решения jhblacklocks, поэтому я решил сделать это с помощью "шаблона":

var displayToast = function(type, msg) {

    $mdToast.show({
        template: '<md-toast class="md-toast ' + type +'">' + msg + '</md-toast>',
        hideDelay: 6000,
        position: 'bottom right'
    });
};

Я также добавил различные типы в мой .css файл:

.md-toast.error {
    background-color: red;
}

.md-toast.success {
    background-color: green;
}

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

Ответ 2

Существует более простой способ, указав тему:

$mdToast.simple().content("some test").theme("success-toast")

И в вашем CSS:

md-toast.md-success-toast-theme {
    background-color: green;
    ...
}

Вы можете включить свой тип сообщения для динамического выбора темы.

Обновление: Как отметил Чарли Нг, чтобы избежать предупреждений об использовании незарегистрированной пользовательской темы, зарегистрируйте его в своем модуле с помощью поставщика тем: $mdThemingProvider.theme("success-toast")

Другое обновление: Было нарушение

Ответ 3

Вы можете видеть по этой ссылке, что вы не можете изменить цвет фона элемента, он всегда будет исправлен:

https://github.com/angular/material/blob/master/src/components/toast/toast-theme.scss

Это объясняется тем, что в Руководстве по дизайну материалов для тостов указано, что фон всегда останется прежним:

https://www.google.com/design/spec/components/snackbars-toasts.html#snackbars-toasts-specs

Обратите внимание на элемент background в списке Specs.

Ничего не сказано о цвете текста в каждой ситуации, оно подразумевает, что оно следует за backgroundPalette, на ротацию оттенка 50, объявленное на этом CSS в GitHub Link.

Способ выделения a warn тоста или accent -пределенного по умолчанию, вызывающего action toast, каждый с его кнопкой действия с использованием соответствующего класса (md-warn или md-accent).

$mdToast.show({
    template: '<md-toast>\
        {{ toast.content }}\
        <md-button ng-click="toast.resolve()" class="md-warn">\
            Ok\
        </md-button>\
    </md-toast>',
    controller: [function () {
        this.content = 'Toast Content';
    }],
    controllerAs: 'toast'
});

Сам тост, который его форма default означает отчет о действии, с успехом подразумевается. Если вам нужно еще больше внимания, заставьте его закрыть, установив кнопку действия, чтобы добавить такие действия, как "Повторить", "Сообщить о проблеме", "Детали", которые можно использовать, чтобы поймать этот клик и записать некоторые технические данные и т.д.... примеры варьируются от того, что вам нужно.

Ответ 4

зарегистрировать темы:

$mdThemingProvider.theme("success-toast");
$mdThemingProvider.theme("error-toast");

добавить css:

md-toast.md-error-toast-theme div.md-toast-content{
    color: white !important;
    background-color: red !important;
}

md-toast.md-success-toast-theme div.md-toast-content{
    color: white !important;
    background-color: green !important;
}

использование:

$mdToast.show(
    $mdToast.simple()
        .content(message)
        .hideDelay(2000)
        .position('bottom right')
        .theme(type + "-toast")
);

Ответ 5

Еще один шаг к ответу rlay3.

Angular Материал в 0.7.1 добавлен предупреждение незарегистрированным темам. https://github.com/angular/material/blob/master/CHANGELOG.md#071--2015-01-30

Если тема не зарегистрирована, каждый раз, когда появляется тост, вы будете получать предупреждающее сообщение в консоли, например:

attempted to use unregistered theme 'custom-toast'
angular.js:12416 Attempted to use unregistered theme 'custom-toast'. 
Register it with $mdThemingProvider.theme().

Чтобы избавиться от предупреждения, вам нужно настроить тему "custom-toast" в вашем приложении angular:

angular.module('myApp', ['ngMaterial'])
.config(function($mdThemingProvider) {
  $mdThemingProvider.theme('custom-toast')
});

и используйте его как:

$mdToast.simple().content("some test").theme("custom-toast");

ссылки: https://material.angularjs.org/latest/#/Theming/04_multiple_themes

Ответ 6

Вы спросили об использовании простого тоста. Не могли бы вы попробовать настроить тост для как демонстрацию и добавить классы к шаблону?

JS

$mdToast.show(
  controller: 'ToastCtrl',
  templateUrl: 'views/shared/toast.html',
  hideDelay: 6000,
  position: $scope.getToastPosition()
)

TEMPLATE

<md-toast class="flash">
  <span flex>Custom toast!</span>
  <md-button ng-click="closeToast()">
   Close
  </md-button>
</md-toast>

CSS

md-toast.flash {
  background-color: red;
  color: white;
}

КОНТРОЛЛЕР (КОФЕ)

'use strict'

###*
 # @ngdoc function
 # @name angularApp.controller:ToastCtrl
 # @description
 # # ToastCtrl
 # Controller of the angularApp
###
angular.module('angularApp')
  .controller 'ToastCtrl', ($scope) ->
    $scope.closeToast = ()->
      $mdToast.hide()

Ответ 7

Чтобы дать другой вариант, $mdToast позволяет определять пресеты тоста, которые вы можете легко создать таким образом, хотя я изо всех сил пытаюсь понять, как изменить текстовое содержимое, любую идею?

$mdToast.show(
  $mdToast.error()
);

Предварительные настройки определяются, как описано в https://material.angularjs.org/latest/api/service/ $mdToast:

$mdToastProvider.addPreset('error', {
  options: function() {
    return {
      template:
        '<md-toast>' +
          '<div class="md-toast-content">' +
          '</div>' +
        '</md-toast>',
      position: 'top left',
      hideDelay: 2000,
      toastClass: 'toast-error',
      controllerAs: 'toast',
      bindToController: true
    };
  }
});

Ответ 8

Сначала я предпочел решение, но мне не нравится настраивать тему в провайдере темы только для тоста. Итак, как насчет этого решения:

JS (Кофе)

   if error
      message = ''

      if error.reason is 'Incorrect password'
        message = 'Email and password combination is incorrect'
      if error.reason is 'User not found'
        message = 'No account found with this email address'

      $mdToast.show(
        templateUrl:  'client/modules/toasts/toastError.html'
        hideDelay:    3000
        controller: ( $scope ) ->
          $scope.message    =  message
          $scope.class      = 'error'
          $scope.buttonLabel = 'close'
          $scope.closeToast = ->
            $mdToast.hide()
      ).then( ( result ) ->
        if result is 'ok'
          console.log('do action')
      )

а затем HTML (JADE)

md-toast(ng-class="class")
  span(flex) {{message}}
  md-button.md-action(ng-click="closeToast()") {{buttonLabel}}

Я попытался использовать параметр locals для передачи переменных в контроллер, но по какой-то причине они не вставляются. (https://material.angularjs.org/latest/#/api/material.components.toast/service/ $mdToast проверить список в функции show)

Затем запустите CSS (STYLUS)

md-toast.success
  background-color    green

md-toast.error
  background-color    red

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

Ответ 9

Вы можете сделать это с помощью factory и некоторых css.

(function () {
  'use strict';

  angular
    .module('app.core')
    .factory('ToastService', ToastService);

  /** @ngInject */
  function ToastService($mdToast) {

    var service = {
      error: error,
      success: success,
      info : info
    };

    return service;

    //////////

    function success(text) {
      $mdToast.show(
        $mdToast.simple()
          .toastClass("toast-success")
          .textContent(text)
      );
    }

    function info(text) {
      $mdToast.show(
        $mdToast.simple()
          .toastClass("toast-info")
          .textContent(text)
      );
    }

    function error(text) {
      $mdToast.show(
        $mdToast.simple()
          .toastClass("toast-error")
          .textContent(text)
      );
    }
  }
}());

И css.

.toast-error .md-toast-content{
  background-color: rgb(102,187,106) !important;
}

.toast-info .md-toast-content{
  background-color: rgb(41,182,246) !important;
}

.toast-error .md-toast-content{
  background-color: rgb(239,83,80) !important;
}