AngularJS中的权限指令



假设我想要一个检查权限的指令。这样我就可以做到:

<a permissions="something.delete">Delete</a>

如果允许权限列表中有"something.delete",则不显示任何内容。

有这个代码:

link: function (scope, element, attrs) {
   var permissionsPromise = PermissionService.checkForPermissions(attrs.permissions);
   permissionsPromise.then(function(result) {
     if (result=== false) {
        element.remove();
     }
  })
}

但由于PermissionService.checkForPermissions()返回promise,因此可能需要一些时间来计算权限,同时链接函数会在知道权限检查结果之前渲染a元素。

解决这个问题的正确解决方案是什么?

反转逻辑并默认隐藏元素,然后根据promise值显示它。

类似elem[0].style.display='none'->elem[0].syle.display='block'的东西

问问自己,你的真正目标是什么,因为你并没有真正在客户端实现权限检查(或者你不应该这样做)。这应该更多地为用户提供正确的UI体验。如果您想完全删除它,那么只需保留对父元素的引用,删除该元素,当您的promise返回时,将其追加回父元素。。是否。

最新更新