2

我想让我的 toast 出现在用户已经定位在页面上的位置(在他已经在浏览器中看到的视图中)。但不知何故,每次吐司出现时,页面都会跳转到其他位置。

索引.html

<div ng-controller="AppCtrl" layout-fill="" layout="column" class="inset toastdemoBasicUsage" ng-app="MyApp">

  <div ng-repeat="n in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16, 17, 18, 19, 20]">
    <p>{{$index}}</p>
  </div>

    <div layout="row" layout-sm="column" layout-align="space-around">
      <md-button ng-click="showToast()">
        Show Toast
      </md-button>
    </div>
</div>

应用程序.js

angular.module('MyApp')
.controller('AppCtrl', function($scope, $mdToast) {
  $scope.showToast = function() {
    $mdToast.show($mdToast.simple().position('top right').textContent('Hello!'));
  };
})

请查看下面的演示链接(向下滚动并单击“显示 Toast”按钮:ngToast 示例

我希望 toast 出现在当前视图的顶部,而不是每次出现时都跳到页面顶部。

顺便说一句,如果我将 toast 位置更改为“右下角” - toast 出现在第一个视图的右下角,而不是用户正在查看的部分的右下角。

我该如何解决这个问题?

谢谢。

4

2 回答 2

1

关于您在下面的评论,这里是包含吐司(在卡片中)的示例 - CodePen

如果你给你的卡一个id,你可以将 toast parent 设置为具有该 id 的元素:

JS

$scope.showCustomToast = function() {
    $mdToast.show({
      hideDelay   : 3000,
      position    : 'top right',
      controller  : 'ToastCtrl',
      templateUrl : 'toast-template.html',
      parent: $element[0].querySelector('#blah')
    });
};

标记

<div id="blah" style="width:400px; height:400px; background:yellow">Toast parent</div>
于 2016-08-12T14:33:15.300 回答
1

我问了来自 Angular Material GitHub 的人,这是他们提供的答案:

这是一个已知问题,我们希望通过重写 toast(和其他一些弹出组件)来解决。

同时,这里有一个简单的解决方法: Codepen Example

基本上,您创建一个仅与视口一样大的容器(Codepen 中的#toast-container),并使其成为 toast 的父级。

HTML

<div id="toast-container"></div>
<div ng-controller="AppCtrl" layout-fill="" layout="column" class="inset toastdemoBasicUsage" ng-app="MyApp">

  <div ng-repeat="n in [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 16, 17, 18, 19, 20]">
    <p>{{$index}}</p>
  </div>

    <div layout="row" layout-sm="column" layout-align="space-around">
      <md-button ng-click="showToast()">
        Show Toast
      </md-button>
    </div>
</div>

CSS

#toast-container {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(255, 0, 0, 0.2);
}

JS

angular.module('MyApp')
.controller('AppCtrl', function($scope, $mdToast) {
  $scope.showToast = function() {
    $mdToast.show($mdToast.simple().position('bottom right').textContent('Hello!').hideDelay(10000).parent(document.getElementById('toast-container')));
  };
})

这是我在那里打开的问题:Angular Material Issue

谢谢。

于 2016-08-13T06:02:47.333 回答