如何实现 Angular 指令来替换元素,但仅限于某些情况

How to implement an Angular directive to replace an element but only in certain cases.

本文关键字:元素 情况 于某些 替换 何实现 实现 指令 Angular      更新时间:2023-09-26

我正在尝试实现一个指令,该指令将锚元素替换为div元素,但仅在特定情况下。锚元素的内容不应被替换,而应包含在新元素中。

这个想法是,锚元素可以有一个属性,其值是一个表达式,应该对其进行计算以检查是否必须替换它。

如果 fooBar 为真:

<a ys-deactivate-anchor="{{ fooBar == true }}"><span>Hallo</span></a>

应该成为

<div ys-deactivate-anchor="{{ fooBar == true }}"><span>Hallo</span></div> 

我的指令目前看起来像这样:

commonModule.directive('ysDeactivateAnchor', function () {
    return{
        restrict: 'A',
        scope: false,
        replace: true,
        template: function (elme, attrs) {
            return "<div ng-transclude></div>";
        },
        transclude: true
    };
});

替换现在按预期工作,我正在寻找一种仅在表达式为 true 时替换元素的方法。目前,除了自己进行整个更换之外,我不知道如何做到这一点。我尝试使用模板函数来检查属性。问题是,在模板函数中,您只能获取静态值,因为尚无可用于计算表达式的范围。

当然,我可以跳过替换和嵌入的东西,自己在链接功能中进行替换,但我想知道我是否可以以某种方式避免这种情况。

我会将此指令用作class并带有条件激活类。

像这样:

<a ng-class="{ 'ysDeactivateAnchor' : fooBar, '':! fooBar}"><span>Hallo</span></a>

对于指令:restrict: 'C'