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