【发布时间】:2016-10-03 12:14:59
【问题描述】:
我想使用 AngularJS 指令根据用户是否具有特定角色(作为属性值给出;每个元素可能不同)来禁用整个应用程序中表单的特定部分。该指令的代码如下:
/** @ngInject */
function PermissionDirective() {
var directive = {
restrict: 'A',
scope: true,
bindToController: true,
controller: controller,
controllerAs: 'permission',
link: link
};
function link(scope, element, attrs) {
scope.soPermission = attrs.soPermission;
}
return directive;
}
/** @ngInject */
function controller($scope, $attrs, ...) {
var permission = this;
permission.granted = false;
$scope.soPermission = $attrs.soPermission;
init();
function init() {
var requiredPermission = $scope.soPermission;
permission.granted = // determine if user can use element
}
}
请注意,它需要自己的作用域才能工作。 HTML中的用法是:
<button type="button" ng-disabled="... || !permission.granted" so-permission="WRITE">
只要so-permission 是元素中具有新范围的唯一指令,一切都很好。然而,一些元素也使用confirm 模态,这似乎也需要一个新的/隔离的范围。这会导致 Multiple directives... Angular 错误。
我的问题是:您如何解决这个问题?如何重新编写 so-permission 指令以摆脱内部作用域并使其继续工作(因为我无法触及 confirm 东西,因为它是一个库)?
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-scope