2016-12-06 62 views
4

我想根據當前位置路徑去除導航欄。使用AngularJS去除DOM元素

這是我到目前爲止有:

angular.module('myModule') 
    .controller('MainController', function ($location, $document) { 
    if ($location.path().indexOf('resetpass') > -1) { 
     var navbar = angular.element($document.querySelector(".top-navbar")); 
     navbar.remove(); 
    } 
    }); 

這種方法的控制檯說:

angular.js:14110 TypeError: $document.querySelector is not a function 
at new <anonymous> (main.controller.js:6) 
at Object.invoke (angular.js:4762) 
at $controllerInit (angular.js:10518) 
at nodeLinkFn (angular.js:9416) 
at compositeLinkFn (angular.js:8757) 
at compositeLinkFn (angular.js:8760) 
at publicLinkFn (angular.js:8637) 
at angular.js:1808 
at Scope.$eval (angular.js:17913) 
at Scope.$apply (angular.js:18013) 

我在做什麼錯?

回答

4

使用ngIfDOM元素,做這樣的事情:

模板:

<element ng-if="hideElemet"></element> 

控制器:

if ($location.path().indexOf('resetpass') > -1) { 
     $scope.hideElement = false 
} 

ngIf將從DOM

+0

工程就像一個魅力!謝謝:) – Codehan25

1

刪除元素嘗試使用document ,而不是$document

var navbar = angular.element(document.querySelector(".top-navbar")).remove(); 
+0

..控制檯錯誤消失了,但導航欄仍然可見。在執行'navbar.remove();'後仍然可見 – Codehan25

+0

? – Julsy

0

我覺得像隱藏導航欄的澤魯伯方式更有意義,但如果你想繼續與你有什麼這應該工作:

angular.module('myModule') 
.controller('MainController', function ($location, $document) { 
    if ($location.path().indexOf('resetpass') > -1) { 
    var navbar = angular.element($document[0].querySelector(".top-navbar")); 
    navbar[0].remove(); 
    } 
}); 

角包裹的它所有的DOM元素,因此要直接訪問元素,您需要獲取第一個元素。

+0

..不知道爲什麼,但它不會工作。我採用Ze Rubeus的方法。 – Codehan25