如何添加具有功能的 Angular 材质自定义 mdToast?

Posted

技术标签:

【中文标题】如何添加具有功能的 Angular 材质自定义 mdToast?【英文标题】:How to add an Angular material custom mdToast with functions? 【发布时间】:2017-02-16 03:20:05 【问题描述】:

我正在使用 Material ui 框架使用 Angular 1.x 构建一个项目,我偶然发现了一个奇怪的问题,即我无法创建自定义 Toast (snackbar)。更具体地说,我无法向 Toast 上的按钮添加事件:

/// <reference path="../../_All.d.ts"/>

module MbRateDialog 
    class MbRateDialogController 
        static $inject = ['$location', '$scope', '$mdToast']

        constructor(private $location, private $scope, private $mdToast) 
        ;

        closeToast() 
          console.log('closed');
          this.$mdToast.hide();
        

        openToast() 
            this.$mdToast.show(
              hideDelay   : 0,
              position    : 'bottom left',
              autoWrap    : false,
              controller  : 'MbRateToastController',
              template    :
                  `<md-toast class="mb-rate-toast">
                      <div  class="mb-rate-toast__content">
                          <span class="mb-rate-toast__content-text">
                              Heading text
                          </span>
                          <div layout="row" layout-align="space-between center">
                              <mb-button type="primary" ng-click="this.closeToast()">Nope</mb-button>
                              <mb-button type="primary" ng-click="$ctrl.closeToast()">Yup</mb-button>
                          </div>
                      </div>
                  </md-toast>`
            );
        ;
    

    class MbRateDialogComponent implements ng.IComponentOptions 
        public controller = MbRateDialogController;
        public bindings:  [binding: string]: string  = 
            url: '='
        ;
        public transclude = true;
        public template =
            `<div flex class="mb-rate-dialog">
                <mb-button type="primary" ng-click="$ctrl.openToast()">RATING</mb-button>
            </div>`;
    
    angular.module('mbRateDialog').component('mbRateDialog', new MbRateDialogComponent());

问题是我不能让 toast 按钮使用相同的范围。起初我试图注入mdToastProvider,但它立即给了我错误,这样它就可以工作,但我不能让按钮做我想做的事。

这里是 API:https://material.angularjs.org/latest/api/service/$mdToast

我对 Angular 很陌生,因此我对不同范围的控制器设置有点困惑。提前致谢!

【问题讨论】:

“自定义用法”演示不是为您解释了吗? material.angularjs.org/latest/demo/toast 【参考方案1】:

$mdToast.show 方法中有范围参数。只需提供所需的范围。

您可以传递当前范围或重用新创建的范围。

您可以通过childScope = $scope.$new();创建范围

【讨论】:

以上是关于如何添加具有功能的 Angular 材质自定义 mdToast?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 材质中具有错误验证的 ControlValueAccessor

Angular 材质自定义选项卡

如何使用 angular5 和 angular 材质创建自定义颜色主题

对象数组的Angular2材质自动完成自定义过滤器

我如何在 cdk-overlay-pane 旁边为 Angular 7 中的材质菜单应用自定义类

使用 Angular 材质定义自定义主题时出现 SassError