7

我们正在尝试找出是否有办法在“预览”模式下临时删除/替换/覆盖一组指令。

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

angular.module('myModule', []);

但指令仍然有效。

任何人都可以帮忙吗?

4

3 回答 3

8

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

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

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

于 2013-11-08T22:54:03.623 回答
1

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

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

于 2013-05-24T13:03:59.890 回答
1

此答案中,描述了如何删除角度内置指令。基于这个想法,我的建议是这样做:

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}。所以这应该是你自己定义的指令。

于 2020-01-22T11:07:12.430 回答