2017-07-06 5 views
0

DOMのいくつかの要素を制御するためのディレクティブをユーザーの権限に従って作成しようとしています。インターネットで探して、私は要素のために.remove()関数を見つけました。それは素晴らしい仕事です。AngularJS - 自己削除/挿入への指示

しかし、権限が変更された場合は、DOM要素を再度表示する必要があります。 .remove()に電話した後、どうすればいいですか?ここ

は私のコードです:

ddo.link = function(scope, el, attrs){ 

// Validate the permission 
if(currentUserService.isAllowed(scope.validatePermission) !== true) { 
    el.remove(); 
} 

// Listener for changes 
$rootScope.$on("eventName", function(event, param){ 

    // Validate the permission 
    if(currentUserService.isAllowed(scope.validatePermission) !== true) { 
     el.remove(); 
    } else { 
     // SHOW THE ELEMENT AGAIN! 
    } 

}); 

}; 

または、デHTMLを削除して、再び挿入するが、別の方法ですか? CSSを使用すると、デベロッパーコンソールから無効にすることができます...

ありがとうございます!

+0

と比較されますか?それが契約の中断者なら、ng-ifのコードを見て、それがどのように機能するかを見てみましょう。 –

+0

現在のユーザーが頻繁に変更するユースケースは何ですか?ユーザーが変更したときにcurrentStateをリロードするだけで十分です。私は、rootScopeにリスナーを追加することを非常に躊躇します。 –

+0

Mike Feltmanが注目してくれてありがとう!アクセス許可はリンクの後に読み込まれるので、私はこの更新の可能性が必要なので、私は指示の展示を更新する必要があります。 – LeonardoGuimaraes

答えて

0

代わりに.remove()を使用してください。display:noneのクラスを追加する場合は、.addClass().removeClass()を試してください。必要に応じてこれを削除してください。 メソッド.remove()は表示要素を削除するため、再度表示することはできません。

別の方法としては、.css()を使用しているが、単にNG-場合には、すでにありません、これを使用しないのはなぜあなたの処理が遅くなり、他

+0

上記のMikeコメントについてのthikingは、ng-ifを使用する方が良い選択です。 –

+0

Pablo!しかし、もしすべてのコントローラに自分のコードを挿入する必要があるなら、どうしたらいいですか...正しいのですか? – LeonardoGuimaraes

+0

HTMLを削除してもう一度挿入する別の方法はありますか? CSSを使用すると、開発者コンソールから無効にすることができます... – LeonardoGuimaraes

関連する問題