从Angular中的模块中删除指令

jam*_*kie 7 angularjs angularjs-directive

我们试图弄清楚是否有一种方法可以在"预览"模式下临时删除/替换/覆盖一组指令.

我们已经尝试删除包含指令的模块,例如:

angular.module('myModule', []);
Run Code Online (Sandbox Code Playgroud)

但指令仍然有效.

有人可以帮忙吗?

guz*_*art 7

在内部,AngularJS 通过在指令名称中添加后缀来从指令创建工厂.因此,您可以通过将工厂替换为工厂来禁用指令.noop

var noopDirective = function() { return function () {}; };
if (previewMode) {
    // Disable ngPaste directive
    angular.module('myModule')
        .factory('ngPasteDirective', noopDirective);
}
Run Code Online (Sandbox Code Playgroud)

确保这是最后执行的代码.


S M*_*han 1

作为替代方案,请考虑将预览模式放入每个指令中。传入一个属性来指示当前状态是预览还是“实时”,并使用 ng-switch 条件化指令模板。

口味各不相同,但对我来说,这感觉比即时重新定义指令更清晰。