Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测Angular2上内部组件的变化?_Angular_Checkbox_Components - Fatal编程技术网

检测Angular2上内部组件的变化?

检测Angular2上内部组件的变化?,angular,checkbox,components,Angular,Checkbox,Components,我有一个复选框组件(我自己的设计),它的使用方式如下: 主要组成部分: 让allowChenge=false; let字段={ 文本:“文本”, 可见:正确 } 检查字段(值:布尔,字段:任意){ //当我得到value=false时 如果(此.允许值){ this.field.visible=值; }否则{ this.field.visible=true; } } 主要组件HTML: 复选框组件: @组件({ 选择器:“p-checkbox”, 模板:` {{text}} ` }) 导出

我有一个复选框组件(我自己的设计),它的使用方式如下:

主要组成部分:

让allowChenge=false;
let字段={
文本:“文本”,
可见:正确
}
检查字段(值:布尔,字段:任意){
//当我得到value=false时
如果(此.允许值){
this.field.visible=值;
}否则{
this.field.visible=true;
}
}
主要组件HTML:


复选框组件:

@组件({
选择器:“p-checkbox”,
模板:`
{{text}}
`
})
导出类CheckBoxComponent{
@Input()值:布尔值;
@Input()只读:boolean=false;
@Input()文本:字符串;
@Output()onSelect:EventEmitter=neweventemitter();
构造函数(public\u elRef:ElementRef){
}    
ngOnChanges(更改:任何){
this.value=changes.value.currentValue;
}    
选择(){
如果(!this.readonly){
this.value=!this.value;
this.onSelect.emit(this.value);
}        
}     
}

在某些情况下,当我选中复选框时,我不需要更改
字段
对象
可见
值。当
field.visible=true
并单击复选框中的ckeckbox时,此.value变为
false
。然后在父组件上,我将其设置回
true
。但是复选框用值
false

表示从更改检测器的角度来看,没有任何更改,因此它不会将更改从父项传播到子项。我在这里已经回答了这样一个问题:

你可以在答案中得到更多细节,比如为什么会发生这样的行为(我已经画了一个很好的模式^ ^)

太长,读不下去了
checkField(值:boolean,字段:any){
this.field.visible=值;
如果(!this.allowChange){
setTimeout(()=>this.field.visible=true);
}
}

并不是说最好将参数传递给复选框以避免选择。为什么不像
[readonly]=“!allowChange”

从更改检测器的角度来看,没有任何更改,因此它不会将更改从父对象传播到子对象。我在这里已经回答了这样一个问题:

你可以在答案中得到更多细节,比如为什么会发生这样的行为(我已经画了一个很好的模式^ ^)

太长,读不下去了
checkField(值:boolean,字段:any){
this.field.visible=值;
如果(!this.allowChange){
setTimeout(()=>this.field.visible=true);
}
}

并不是说最好将参数传递给复选框以避免选择。为什么不像
[readonly]=“!allowChange”

我知道在你的代码中没有
ngModel
,但在引擎盖下是相同的机制:从变更检测器的角度来看,没有任何变化,所以你需要使用
setTimeout()
我尝试在这个.field.visible=true附近使用setTimeout();在父组件中。没有帮助。我在其他输入类型字段上使用的ngModel指令。在这里,我根据值设置类,所以虽然我不使用任何输入->但我不需要使用ngModel指令。我从来没有说过应该使用
ngModel
,我说过对于这样的行为,这是相同的机制。我知道在你的代码中没有
ngModel
,但这是相同的机制:从变更检测器的角度来看,没有任何变化,所以你需要使用
setTimeout()
我尝试在这个.field.visible=true周围使用setTimeout();在父组件中。没有帮助。我在其他输入类型字段上使用的ngModel指令。在这里,我根据值设置类,因此,虽然我不使用任何输入->但我不需要使用ngModel指令。我从来没有说过应该使用
ngModel
,我说过这与这种行为的机制是相同的。将来我将在中使用此代码,并且我没有任何选项在对象中添加额外字段。我希望避免这种情况。但是您的复选框组件中有一个
@Input()只读:boolean
。是的,对于将来的所有复选框,父组件中的此值将为真/假。+当然可以将复选框作为独立组件使用。如果使用超时,则不会!!!!!!!!!!!!!!!!将来我将在中使用此代码,并且我没有任何选项在对象中添加额外的字段。我希望避免这种情况。但是您的复选框组件中有一个
@Input()只读:boolean
。是的,对于将来的所有复选框,父组件中的此值将为真/假。+当然可以将复选框作为独立组件使用。如果使用超时,则不会!!!!!!!!!!!!!!!!