Javascript 为特定函数复制ng if

Javascript 为特定函数复制ng if,javascript,angularjs,Javascript,Angularjs,我正在尝试为AngularJS应用程序创建一个指令。它的用法如下: <div requires-permissions="['permission_1', ...]"> This should only show if the user has appropriate permissions. </div> 每个控制器都需要一个对用户服务的引用。我已经看了一遍了,我不能理解代码的头尾 我非常确定我可以使用jqlite的remove函数删除元素。我以后怎么才能替换它呢

我正在尝试为AngularJS应用程序创建一个指令。它的用法如下:

<div requires-permissions="['permission_1', ...]">
  This should only show if the user has appropriate permissions.
</div>
每个控制器都需要一个对用户服务的引用。我已经看了一遍了,我不能理解代码的头尾


我非常确定我可以使用jqlite的remove函数删除元素。我以后怎么才能替换它呢?

我已经为您的需要实现了类似的功能,它调用了
experitif

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

时,就会出现神奇的效果,这似乎很有效。谢谢链接功能是否在每个摘要周期上运行?也就是说,在您的示例中,更改ExperimentManager的状态是否会影响experiementIf指令?在我的示例中,experiment无法在运行时更改其值,因此我没有检查它。您可以使用attribute.observ检查attibuye是否已更改。
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);
        }
    };
}