AngularJS UIRouter - 删除后退时的主体样式
AngularJS UIRouter - Remove body style on back click
问题背景:
我有一个有 2 个视图的 Angular 应用程序,使用 UIRouter 我交换了 URL 也被路由的视图
在我看来,我正在使用 Jasny Bootstrap 制作一个关闭 canvas 菜单 'push' 菜单,如图所示:
https://codepen.io/rugor/pen/eiyzh
如图所示,当菜单显示时,将样式添加到 body 标签中:
<body translate="no" class="canvas-slid" style="position: relative; left: 300px; overflow: hidden; right: -300px;">
// Other HTML
</body>
问题:
我有以下 Index.html 视图用作要注入到我的每个应用程序页面的主要 ui-视图容器:
<body ng-app="app">
<div ui-view>
//Views injected here when routed.
</div>
</body
如果我浏览我的主页,即 Home.cshtml,我会看到以下页面:
主页正文样式:
<body ng-app="app" class="ng-scope">
//Homepage Html
然后我浏览到 Update.html 页面并显示 Jansy Off Canvas 菜单:
请注意,Index.cshtml 页面的 body 标签添加了以下样式以显示关闭 canvas 菜单:
<body ng-app="app" class="ng-scope canvas-slid" style="position: relative; left: 300px; overflow: hidden; padding-right: 17px; right: -300px;">
</body>
问题由此开始。
如果我现在在关闭 Jansy canvas 菜单的情况下单击浏览器上的 后退按钮 revealed那么body style是not去掉body标签,如图:
仍然应用正文样式:
<body ng-app="app" class="ng-scope canvas-slid" style="position: relative; left: 300px; overflow: hidden; padding-right: 17px; right: -300px;">
</body>
我该如何克服这个问题?当用户单击浏览器上的后退按钮时,我可以删除 ui-view Index.html 中 body 标签上的任何样式吗?如果有怎么办?
我明白为什么会这样,如果用户关闭 canvas 菜单并点击返回,问题就不会发生。
由于 body 在视图之间共享,我需要一种方法来清除单击后退时的样式,以有效地将其重置为空。
您可以为 locationchangestart 或 locationchangesucess 事件(https://docs.angularjs.org/api/ng/service/$location) or statechangestart/statechangesuccess https://github.com/angular-ui/ui-router/wiki)向 $rootScope 添加侦听器,并从正文中删除 class。
为了更花哨,您可以将其实现为 body 元素上的指令:
<body mydirective>
app.directive(mydirective,
...
link : function(scope, element, attrs) {
scope.$on('$stateChangeStart', function () {
element.removeClass("canvas-slid");
}
}
实际上,这是jasny-bootstrap插件的一个小问题,这里我给出一个临时解决方案来删除样式。
var _enableScrolling = $.fn.offcanvas.Constructor.prototype.enableScrolling;
$.fn.offcanvas.Constructor.prototype.enableScrolling = function () {
_enableScrolling.apply(this, arguments);
$('body').css({
'overflow': '',
'padding-right': ''
});
}
但是您可以使用 jasny-bootstrap 的主分支检查它以进行实际修复
您可以尝试在按下后退按钮时使用 jquery 删除内联 CSS。
所以基本上当你按下后退按钮时无论控制器加载什么,都尝试将这段代码添加到它。
$('body').removeAttr("style")
它将删除应用于 body 标签的任何内联样式
问题背景:
我有一个有 2 个视图的 Angular 应用程序,使用 UIRouter 我交换了 URL 也被路由的视图
在我看来,我正在使用 Jasny Bootstrap 制作一个关闭 canvas 菜单 'push' 菜单,如图所示:
https://codepen.io/rugor/pen/eiyzh
如图所示,当菜单显示时,将样式添加到 body 标签中:
<body translate="no" class="canvas-slid" style="position: relative; left: 300px; overflow: hidden; right: -300px;">
// Other HTML
</body>
问题:
我有以下 Index.html 视图用作要注入到我的每个应用程序页面的主要 ui-视图容器:
<body ng-app="app">
<div ui-view>
//Views injected here when routed.
</div>
</body
如果我浏览我的主页,即 Home.cshtml,我会看到以下页面:
主页正文样式:
<body ng-app="app" class="ng-scope">
//Homepage Html
然后我浏览到 Update.html 页面并显示 Jansy Off Canvas 菜单:
请注意,Index.cshtml 页面的 body 标签添加了以下样式以显示关闭 canvas 菜单:
<body ng-app="app" class="ng-scope canvas-slid" style="position: relative; left: 300px; overflow: hidden; padding-right: 17px; right: -300px;">
</body>
问题由此开始。
如果我现在在关闭 Jansy canvas 菜单的情况下单击浏览器上的 后退按钮 revealed那么body style是not去掉body标签,如图:
仍然应用正文样式:
<body ng-app="app" class="ng-scope canvas-slid" style="position: relative; left: 300px; overflow: hidden; padding-right: 17px; right: -300px;">
</body>
我该如何克服这个问题?当用户单击浏览器上的后退按钮时,我可以删除 ui-view Index.html 中 body 标签上的任何样式吗?如果有怎么办?
我明白为什么会这样,如果用户关闭 canvas 菜单并点击返回,问题就不会发生。
由于 body 在视图之间共享,我需要一种方法来清除单击后退时的样式,以有效地将其重置为空。
您可以为 locationchangestart 或 locationchangesucess 事件(https://docs.angularjs.org/api/ng/service/$location) or statechangestart/statechangesuccess https://github.com/angular-ui/ui-router/wiki)向 $rootScope 添加侦听器,并从正文中删除 class。
为了更花哨,您可以将其实现为 body 元素上的指令:
<body mydirective>
app.directive(mydirective,
...
link : function(scope, element, attrs) {
scope.$on('$stateChangeStart', function () {
element.removeClass("canvas-slid");
}
}
实际上,这是jasny-bootstrap插件的一个小问题,这里我给出一个临时解决方案来删除样式。
var _enableScrolling = $.fn.offcanvas.Constructor.prototype.enableScrolling;
$.fn.offcanvas.Constructor.prototype.enableScrolling = function () {
_enableScrolling.apply(this, arguments);
$('body').css({
'overflow': '',
'padding-right': ''
});
}
但是您可以使用 jasny-bootstrap 的主分支检查它以进行实际修复
您可以尝试在按下后退按钮时使用 jquery 删除内联 CSS。 所以基本上当你按下后退按钮时无论控制器加载什么,都尝试将这段代码添加到它。
$('body').removeAttr("style")
它将删除应用于 body 标签的任何内联样式