Remove a directive from module in Angular
我们正在尝试确定是否有一种方法可以在"预览"模式下临时删除/替换/覆盖一组指令。
我们尝试删除了包含指令的模块,例如:
1 | angular.module('myModule', []); |
但指令仍处于活动状态。
任何人都可以帮忙吗?
内部AngularJS通过在指令名称后添加后缀来从指令创建工厂。因此,可以通过将工厂替换为
1 2 3 4 5 6 | var noopDirective = function() { return function () {}; }; if (previewMode) { // Disable ngPaste directive angular.module('myModule') .factory('ngPasteDirective', noopDirective); } |
确保这是最后执行的代码。
在此答案中,描述了如何删除内置的angular指令。
基于这个想法,我的建议是这样做:
1 2 3 4 5 6 7 8 9 10 | angular.module('myModule', []) // ... registering some stuff on the module .config(['$provide', function ($provide) { // Remove the progress directive of 'ui.bootstrap'. // Otherwise we cannot use native progress bar. $provide.decorator('{DIRECTIVE_NAME}Directive', ['$delegate', function ($delegate) { $delegate.pop(); return $delegate; }]); }]); |
作为替代方案,请考虑将预览模式置于每个指令中。传递属性以指示当前状态是预览还是\\'live \\',并使用ng-switch条件化指令模板。
口味各不相同,但是与即时定义指令相比,这对我来说是一种更清晰易懂的方法。