假设我想要一个检查权限的指令。这样我就可以做到:
<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返回时,将其追加回父元素。。是否。