0

所以我有这个指令将允许使用声明的方式隐藏或显示元素:复制NG-如果用指令

<div cdt-visible-to="Admin,Moderator">...</div> 

所以我们的HTML变得声明越好。而这也正是我们的指令看起来像:

eDiscovery.directive('cdtVisibleTo', ['AuthService', function (AuthService) { 

    return { 

     restrict: 'AE', 

     link: function ($scope, elem, attrs) { 

     let cdtArray = String(attrs['cdtVisibleTo'] || '') 
     .split(/[ ,]+/).map(i => String(i).trim()).filter(i => i); 

     let ln = cdtArray.length; 

     for (let i = 0; i < ln; i++) { 
      let r = cdtArray[i]; 
      if(AuthService.hasPersona(r)){ 
      elem.removeAttr('hidden'); 
      return; 
      } 
     } 

     elem.attr('hidden', 'hidden'); 

     } 
    } 
    }]); 

所以这就像一个替身ng-show

我的问题是 - ng-if的外观如何?

用Angular指令完全从DOM中删除元素的最佳方法是什么?

回答

1

您可以使用角元素的一个.remove()方法来删除从DOM元素: 首先从ELEM得到角元素,然后使用删除功能

为此进行:

angular.element(elem).remove(); 

我想你想,如果没有传递给指令人物角色的一个被授权从DOM中删除它,所以也许你可以使用下面的代码:

var notAuthorized = false; 
for (let i = 0; i < ln; i++) { 
    let r = cdtArray[i]; 
    if(AuthService.hasPersona(r)){ 
    notAuthorized = true; //A Persona is authorized 
    return; 
    } 
} 

if (notAuthorized) { 
    angular.element(elem).remove(); 
} 

更多信息& angular.element的方法: https://docs.angularjs.org/api/ng/function/angular.element

+0

谢谢,是否有必要包装elem与angular.element()? –

+1

需要使用remove()方法。如果你想使用本地JS,你可以使用elem.parentNode.removeChild(elem); – Sergio10

+0

谢谢:)我想我会使用angular.elem()然后,我想只是在幕后使用jQuery。 –