AngularJs有条件地将自定义指令应用于HTML

AngularJs有条件地将自定义指令应用于HTML,angularjs,Angularjs,是否有一种基于某些条件将自定义指令应用于HTML模板的正确方法 例如: 只有在定义了{item}时,我才需要应用“我的自定义指令” 这感觉像是设计问题,而不是技术问题 与其有条件地应用自定义指令,不如简单地找出在指令内部要做什么。从语义上讲,这更有意义 例如,如果在本例中未定义项,则不要在指令内执行任何操作。这取决于您的要求,如果您使用它作为元素而不是属性,则可以使用ng if实现 对于下面代码中的ex,当项未定义时,li不会出现在dom中 <my-custom-directive="{{

是否有一种基于某些条件将自定义指令应用于HTML模板的正确方法

例如:


只有在定义了{item}时,我才需要应用“我的自定义指令”

这感觉像是设计问题,而不是技术问题

与其有条件地应用自定义指令,不如简单地找出在指令内部要做什么。从语义上讲,这更有意义


例如,如果在本例中未定义项,则不要在指令内执行任何操作。

这取决于您的要求,如果您使用它作为元素而不是属性,则可以使用
ng if
实现

对于下面代码中的ex,当项未定义时,li不会出现在dom中

<my-custom-directive="{{item}}" ng-if="item">
    <li>{{item}}</li>
</my-custom-directive>

  • {{item}}

  • 使用
    ng如果
    ,则在满足条件之前不会插入DOM

    AngularJS在DOM中留下注释供其参考

    因此,在定义
    {{item}}
    之前,
    根本不在DOM中

    如果需要从变量向DOM动态添加指令,请使用$compile provider。我给自己制定了一个关于这些事情的指令

    angular.module('test', []).directive('directiveName', ['$compile', function($scope) { return { link: function($scope, element, attrs, ctrl) { element.replaceWith($compile(attrs.direciveName)($scope)) } } }]); angular.module('test',[]).directive('directiveName',['$compile',function($scope){ 返回{ 链接:函数($scope、element、attrs、ctrl){ replaceWith($compile(attrs.direciveName)($scope)) } } }]); 您可以这样使用它:

    <div directive-name="{{customDirectiveName}}"></div>
    
    
    

    {{customDirectiveName}}
    是其他地方的$scope变量。从这一点上,您可以对从服务器等接收到的JSON对象重复ng

    如果
    解决您的问题,
    ng会吗?类似于
    ng if=“item”
    然后显示您的方向是的,也可以使用ng show,具体取决于您是否要渲染到dom或not@aw04ng show和ng if之间有区别,ng if从dom中删除元素,而且angular也不一样,在ng show/ng hide的情况下,它不会从dom中删除元素,并且会继续监视。是的,有时也可以,建议对可能会发生很大变化的项目使用它。我只是指出这是一种选择