簡體   English   中英

AngularJS UIRouter-刪除單擊后的主體樣式

[英]AngularJS UIRouter - Remove body style on back click

問題背景:

我有一個具有2個視圖的Angular應用程序,使用UIRouter我也交換了URL也被路由的視圖

在我看來,我正在使用Jasny Bootstrap來生成畫布菜單“推”菜單,如下所示:

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標簽已添加以下樣式,以顯示非畫布菜單:

<body ng-app="app" class="ng-scope canvas-slid" style="position: relative; left: 300px; overflow: hidden; padding-right: 17px; right: -300px;">
</body>

這是問題開始的地方。

如果我現在點擊與Jansy關閉帆布菜單瀏覽器的后退按鈕 透露然后身體風格從體內移除標簽,如圖所示:

在此處輸入圖片說明

身體樣式仍然適用:

<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標簽上刪除任何樣式? 如果可以,怎么辦?

我了解為什么會這樣,並且如果用戶關閉畫布菜單並單擊返回,則不會發生此問題。

由於主體是在視圖之間共享的,因此我需要一種清除后退點擊樣式的方式,以將其有效地重置為空。

您可以將監聽器添加到$ rootScope中,以獲取locationchangestart或locationchangesucess事件( https://docs.angularjs.org/api/ng/service/ $ location)或statechangestart / statechangesuccess https://github.com/angular-ui/ui- router / wiki )並從正文中刪除類。

為了更加精美,您可以將其作為對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的master分支來檢查它的實際修復方法

jasny-bootstrap ui stlye刪除

您可以嘗試在按下返回按鈕時使用jquery刪除該內聯CSS。 因此,基本上,無論您在按下后退按鈕時加載了什么控制器,都請嘗試向其添加代碼。

$('body').removeAttr("style")

它將刪除應用於body標簽的所有內聯樣式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM