javascript - 如何在 Angular Material 的$mdToast中一起使用自定义主题和模板

标签 javascript css angular-material angular-material2

我有以下 css 应用于 mdToast 以获得不同的响应 例如 成功、错误、信息、警告。

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;
}

我想将这个主题 css 应用到 mdToast 下面

$mdToast.show({
                templateUrl:'views/toast-template.html',
                controller:'ToastCtl',
                hideDelay:5000,
                controllerAs: 'toast',
                bindToController: true,
                locals:{message:message,type:type}
            });

我能够成功使用主题或模板。但是,我无法同时使用模板和主题。

最佳答案

根据documentation使用主题似乎只适用于 $mdToast.simple()

enter image description here

它不可用作 $mdToast.show(optionsOrPreset) 的选项。不知道为什么。但是,可以使用 toastClass 选项来更改 toast。这是一个例子 - CodePen

标记

<div ng-controller="AppCtrl" class="inset toastdemoCustomUsage" ng-cloak="" style="height:300px; padding: 25px;" ng-app="MyApp">
  <md-button ng-click="showCustomToast()" class="md-raised" style="padding-left: 10px;padding-right: 10px;">
    Show Custom Toast
  </md-button>

  <script type="text/ng-template" id="toast-template.html">
    <md-toast>
      <span class="md-toast-text" flex>{{data.message}}</span>
      <md-button ng-click="closeToast()">Close</md-button>
    </md-toast>
  </script>
</div>

JS

(function() {
  angular
    .module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
    .controller('AppCtrl', function($scope, $mdToast) {

    $scope.showCustomToast = function() {
      var data = {type: "SUCCESS", message: "Well done!"};
      var toastClass;
      switch (data.type) {
        case "SUCCESS":
          toastClass = "success";
          break;
        case "ERROR":
          toastClass = "error";
          break;
        case "INFO":
          toastClass = "info";
          break;
        case "WARNING":
          toastClass = "warning";
          break;
      };

      $mdToast.show({
          hideDelay   : 3000,
          position    : 'top right',
          controller  : 'ToastCtrl',
          templateUrl : 'toast-template.html',
          locals: {
            data: data
          },
          toastClass: toastClass
        });
      };
    })
    .controller('ToastCtrl', function($scope, $mdToast, $mdDialog, data) {
      $scope.data = data;
      $scope.closeToast = function() {
        if (isDlgOpen) return;
        $mdToast
          .hide()
          .then(function() {
            isDlgOpen = false;
          });
      };
    });
})();

CSS

.success .md-toast-content  {
  background: green;
}
.error .md-toast-content  {
  background: red;
}
.info .md-toast-content  {
  background: orange;
}
.warning .md-toast-content  {
  background: purple;
}

关于javascript - 如何在 Angular Material 的$mdToast中一起使用自定义主题和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39452056/

相关文章:

javascript - 导航到页面后运行 javascript

html - 撤消移动屏幕的 float

css - 如何在 md-toolbar 中将元素定位到右侧?

Angular 形 Material 按钮切换组

angular - 如何将 Angular Material mat-card 切换为全屏

Javascript:如何将一个字符串文字包含到另一个字符串文字中?

javascript - Backbone 形态,逃生

javascript - 检查的输入在 Angular 侧面部分中不起作用

html - Css 悬停下拉列表

jquery - 使用 jquery 的多功能选项卡