如何在AngularJS中使指令执行具有确定性?

时间:2016-11-11 18:58:56

标签: angularjs

我有一个有趣的情况,我过去没有遇到过,我不确定是否有一个" Angular"本地做这件事的方式。基本上,我开始时使用这样一个简单的按钮:

<button type="btn" ng-disabled="model.isDisabled">My Button</button>

正如你所看到的,除了我正在使用的ngDisabled指令之外没有什么特别之处。我最近开发了一个由Angular服务,指令和实用程序服务组成的授权基础结构。本质上,它检查给定用户的权限,并使用一组必需的权限引用它们,以查看是否应禁用给定的元素。将此Authorization指令应用于我的按钮会产生以下结果:

<button type="btn" sk-auth sk-auth-enable="[AuthPermissions.Restore]" ng-disabled="model.isDisabled">My Button</button>

在这里,您将看到我只是传递用户需要的权限数组,以便启用此按钮。因此,如果该用户具有&#34;恢复&#34;权限,然后应该启用此按钮。这里的问题是我的指令和ngDisabled指令冲突。我的指令运行并将禁用该元素,但随后将运行下一个摘要周期,并且ngDisabled指令将重新启用它,因为表达式在&#34; ng-disabled&#34;是假的。

基本上,我需要首先运行我的指令,如果它确定用户CAN使用此按钮,那么它允许其他ngDisabled指令正常工作,但如果它不能使用该按钮,那么skAuth指令将永久禁用它。

我的架构有根本缺陷吗?我是否需要完全重写此授权基础架构才能适应这种情况?我最初想过只使用一种在ng-disabled中调用的方法,比如ng-disabled="!hasAuthAccess(AuthPermissions.Restore)",但是这导致在每个摘要周期调用这个方法,这是不需要的,我们必须开始混合具有业务逻辑的授权逻辑,我宁愿将它们分开。

有没有人对如何实现这一目标有任何建议?

0 个答案:

没有答案