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。 –