2016-12-06 61 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