JavaScript等价于angularjs ng if

JavaScript等价于angularjs ng if,javascript,angularjs,Javascript,Angularjs,如果我想在DOM上删除/添加元素,我只需要使用ng If,并且它下面的代码没有编译成DOM,我可以使用纯js做同样的事情吗?我不希望HTML代码在我的js代码中 使用CSS隐藏它: <div id = "infoPage" style="display: none;"> 您可以尝试以下方法: 想法: 创建一个包含currentElement及其父对象引用的对象(这样您就知道要添加到哪里) 创建当前元素的克隆,以便在删除该元素后添加相同的元素 使用Object.defineProp

如果我想在
DOM
上删除/添加元素,我只需要使用
ng If
,并且它下面的代码没有编译成DOM,我可以使用纯js做同样的事情吗?我不希望HTML代码在我的js代码中

使用CSS隐藏它:

<div id = "infoPage" style="display: none;">

您可以尝试以下方法:

想法:
  • 创建一个包含currentElement及其父对象引用的对象(这样您就知道要添加到哪里)
  • 创建当前元素的克隆,以便在删除该元素后添加相同的元素
  • 使用
    Object.defineProperty
    创建属性。这样,您就可以拥有自己的setter,并且可以通过它观察更改
  • 要切换元素,请选中
    • 如果value为true,则必须添加元素。但检查同一元素是否已经可用,以避免重复
    • 如果为false,则删除元素
var CustomNGIf=function(元素、回调、属性名称){
var _值=null;
//创建元素的副本,以便将来可以存储/使用
this.parent=element.parentNode;
this.element=元素;
this.clone=null;
//创建一个应该被监视的属性
Object.defineProperty(这个,propertyName{
get:function(){
返回_值;
},
设置:函数(值){
//如果传递了相同的值,则不执行任何操作。
如果(_值===值)返回;
_值=!!值;
此.handleChange(_值);
}
});
this.handleChange=函数(值){
this.clone=this.element.cloneNode(true);
如果(_值){
var index=Array.from(this.parent.children).indexOf(this.element);
//检查元素是否已存在。
//如果某些代码在删除节点之前中断,则可能会发生这种情况。
如果(索引>=0)返回;
this.element=this.clone.cloneNode(true);
this.parent.appendChild(this.element);
}否则{
this.element.remove();
}
//任何特殊处理
callback&&callback();
}
}
var div=document.getElementById('infoPage');
const propName='value';
var obj=新的CustomNGIf(div,function(){
控制台日志(“更改”)
},名称);
var计数=0;
var interval=setInterval(函数(){
obj[propName]=计数+++%2;
如果(计数>=10){
窗口。清除间隔(间隔);
}
},2000)

试验

可能重复@Weedoze No。这是关于基于标志添加/删除元素的。@Rajesh-是的,我的目标是js中只显示标志。@Rajesh链接将向他解释如何删除子元素。如果只需添加一个
If
条件即可将其删除或不删除。它还需要什么?你可以用removeChild来做。只要添加if条件,就可以了。与ngIfNote一样:如果您认为答案有问题,请在投票时分享您的反馈意见。:-)
var show = false; //or true