我们正试图弄清楚在“预览”模式下是否有临时删除/替换/覆盖一组指令的方法。
我们已尝试删除包含指令的模块,例如:
angular.module('myModule', []);
但指令仍然有效。
有人可以帮忙吗?
答案 0 :(得分:7)
内部AngularJS通过在指令名称中添加后缀,从指令创建工厂。因此,您可以通过用noop
工厂替换工厂来禁用指令。
var noopDirective = function() { return function () {}; };
if (previewMode) {
// Disable ngPaste directive
angular.module('myModule')
.factory('ngPasteDirective', noopDirective);
}
确保这是最后执行的代码。
答案 1 :(得分:1)
作为替代方案,请考虑将预览模式放入每个指令中。传入属性以指示当前状态是预览还是“实时”,并使用ng-switch对指令模板进行条件化。
口味各不相同,但对我而言,这比对动态重新定义指令更为清晰。
答案 2 :(得分:1)
在this answer中,描述了如何删除内置的角度指令。 基于这个想法,我的建议是这样做:
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;
}]);
}]);
$delegate.pop()
删除最后添加的名称为{DIRECTIVE_NAME}
的指令。因此,这应该是您自己定义的指令。