为什么 Angular Material ngToast 让页面跳转?
Why Angular Material ngToast makes the page jump?
我想让我的 toast 出现在用户已经在页面上定位的位置(在他已经在浏览器中看到的视图中)。但是不知何故,每次出现吐司时,页面都会跳到其他位置。
index.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>
app.js
angular.module('MyApp')
.controller('AppCtrl', function($scope, $mdToast) {
$scope.showToast = function() {
$mdToast.show($mdToast.simple().position('top right').textContent('Hello!'));
};
})
请参阅以下 link 演示(向下滚动并单击 'Show Toast' 按钮:ngToast Example
我希望 toast 出现在当前视图的顶部,而不是每次出现时都跳转到页面顶部。
顺便说一下,如果我将 toast 位置更改为 'bottom right' - toast 出现在第一个视图的右下角,而不是用户正在查看的部分的右下角。
我该如何解决这个问题?
谢谢。
关于您在下方的评论,这里是包含吐司(在卡片中)的示例 - 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>
我问了 Angular Material GitHub 的人,这是他们提供的答案:
This is a known issue that we hope to solve with a rewrite of the
toast (and some other popup components).
In the meantime, here is an easy workaround:
Codepen Example
Basically, you create a container (#toast-container in the Codepen)
that is only as big as the viewport, and make it the parent of the
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
谢谢。
我想让我的 toast 出现在用户已经在页面上定位的位置(在他已经在浏览器中看到的视图中)。但是不知何故,每次出现吐司时,页面都会跳到其他位置。
index.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>
app.js
angular.module('MyApp')
.controller('AppCtrl', function($scope, $mdToast) {
$scope.showToast = function() {
$mdToast.show($mdToast.simple().position('top right').textContent('Hello!'));
};
})
请参阅以下 link 演示(向下滚动并单击 'Show Toast' 按钮:ngToast Example
我希望 toast 出现在当前视图的顶部,而不是每次出现时都跳转到页面顶部。
顺便说一下,如果我将 toast 位置更改为 'bottom right' - toast 出现在第一个视图的右下角,而不是用户正在查看的部分的右下角。
我该如何解决这个问题?
谢谢。
关于您在下方的评论,这里是包含吐司(在卡片中)的示例 - 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>
我问了 Angular Material GitHub 的人,这是他们提供的答案:
This is a known issue that we hope to solve with a rewrite of the toast (and some other popup components).
In the meantime, here is an easy workaround: Codepen Example
Basically, you create a container (#toast-container in the Codepen) that is only as big as the viewport, and make it the parent of the 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
谢谢。