Копировать нг-если для конкретных функций - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать директиву для нашего приложения AngularJS. Это будет использовано так:

<div requires-permissions="['permission_1', ...]">
  This should only show if the user has appropriate permissions.
</div>

Он будет функционировать так же, как ng-if, в том смысле, что удалит или заменит элемент. Без этой директивы мне нужно было бы написать это для каждого такого элемента:

<div ng-if="ctrl.User.has_permissions(['permission_1', ...])">etc.</div>

и каждому контроллеру потребуется ссылка на службу пользователя. Я просмотрел код для ng-if , и я не могу сделать из него ни головы, ни хвоста.

Я почти уверен, что могу удалить элемент, используя функцию удаления jqlite. Как, черт возьми, я могу заменить его позже?

1 Ответ

0 голосов
/ 28 августа 2018

Я реализовал нечто подобное для ваших нужд, оно вызывает experimentIF

export function experimentIf(ngIfDirective, experimentsManager) {
    const ngIf = ngIfDirective[0];
    const NAME = 'experimentIf';

    return {
        restrict: ngIf.restrict,
        priority: ngIf.priority + 1,
        terminal: ngIf.terminal,
        transclude: ngIf.transclude,
        link: function ($scope, $element, $attr) {
            const experimentName = $attr[NAME];

            $attr.ngIf = function () {
                return experimentsManager.isExperimentEnabled(experimentName);
            };
            ngIf.link.apply(ngIf, arguments);
        }
    };
}

По сути, при необходимости он использует конфигурацию ng-if и изменяет только часть утверждения. В моем случае это был сервис experimentsManager.

Магия возникает, когда вы вводите ngIfDirective.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...