如何隐藏Angular Material mdToast?

时间:2014-11-14 10:22:04

标签: javascript angularjs toast

app.controller('testCtrl', function ($rootScope, $scope, $mdToast) 
{   
    $scope.showHideToast = function () {
        $mdToast.show({
                template: '<md-toast>test</md-toast>',
                hideDelay: 0,
                position: 'bottom right'
          });

        // DO STUFF

        $mdToast.hide();
}

吐司出现但没有隐藏。 我得到这个类型错误:

TypeError: undefined is not a function
at Object.onRemove (../angular-material/angular-material.js:4240:13)
at Object.InterimElement.self.remove (../angular-material/angular-material.js:5103:29) 
at Object.hide (../angular-material/angular-material.js:5032:40)
...

为什么这不适用于Angular Material? 有什么方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:7)

真正的问题是你如何使用hide方法,它可以选择在输入中接收要解决的承诺。

所以你的代码应该是:

app.controller('testCtrl', function ($rootScope, $scope, $mdToast) 
{   
    $scope.showHideToast = function () {
        // hold the reference
        var myToast = $mdToast.show({
                        template  : '<md-toast>test</md-toast>',
                        hideDelay : 0,
                        position  : 'bottom right'
                      });

        // DO STUFF

        // hide the toast
        $mdToast.hide(myToast);
   };
}

以这种方式调用hide方法将关闭先前定义的toast,即使它是使用hideDelay: 0定义的。

答案 1 :(得分:3)

我不知道为什么上面的答案被低估了。如果你将hideDelay设置为0,它就不会像我经历的那样隐藏吐司。我也有这个问题,但我自己的情况是在最后一个属性的值之后的逗号,恰好是hideDelay属性。

我建议您设置一个高于零的值并且这样做,我认为您不需要再次致电$mdToast.hide()

这样做对我来说很好:

$mdToast.show({
  template: '<md-toast class="md-warn">Test</md-toast>',
  hideDelay: 2000
});

显示toast消息并在2秒后隐藏它

编辑:

另外,考虑检查你的hammerjs版本2.0.0之上的任何版本应该是好的IMO

答案 2 :(得分:0)

您已将hideDelay设置为0.我建议将其设置为6000. 0表示永不隐藏。