错误:ExpressionChangedAfterItHasBeenCheckedError:上一个值:ng-untouched:true。当前值:“ ng-untouched:false”

时间:2019-07-04 15:41:00

标签: angular

我已用最少的代码在StackBlitz上重现了该问题。

第1步:点击文字

第2步:关注文本字段

第3步:输入enter并检查控制台中的错误

  

错误:ExpressionChangedAfterItHasBeenCheckedError:表达式具有   检查后更改。先前的值:“ ng-untouched:true”。   当前值:“ ng-untouched:false”。

2 个答案:

答案 0 :(得分:4)

您必须使用detectChanges()的{​​{1}}方法在指令中手动触发变更检测

像这样修改ChangeDetectorRef

editable-on-enter-inplace.directive.ts

import { Directive,HostListener ,ChangeDetectorRef} from '@angular/core';

答案 1 :(得分:0)

我想知道为什么会出现此错误,对于一个简单的答案,它涉及在不同组件以及在app.module.ts中多次调用同一import元素。

遵循模式示例Modal Example using ng-bootstrap时出现错误

我解决了这个问题,只需在服务中调用它,然后在所有应用程序中使用它即可。

致电[assembly:ExportRenderer(typeof(ExtendedButton), typeof(ExtendedButtonRenderer)] namespace SomeNamespace.Droid { public class ExtendedButtonRenderer : Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer { public new ExtendedButton Element { get { return (ExtendedButton)base.Element; } } protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Button> e) { base.OnElementChanged(e); if (e.NewElement == null) { return; } SetTextAlignment(); } protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { base.OnElementPropertyChanged(sender, e); if (e.PropertyName == ExtendedButton.HorizontalTextAlignmentProperty.PropertyName) { SetTextAlignment(); } } public void SetTextAlignment() { Control.Gravity = Element.HorizontalTextAlignment.ToHorizontalGravityFlags(); } } public static class AlignmentHelper { public static GravityFlags ToHorizontalGravityFlags(this Xamarin.Forms.TextAlignment alignment) { if (alignment == Xamarin.Forms.TextAlignment.Center) return GravityFlags.AxisSpecified; return alignment == Xamarin.Forms.TextAlignment.End ? GravityFlags.Right : GravityFlags.Left; } } }

app.module.ts

致电import { NgbModule } from '@ng-bootstrap/ng-bootstrap';

app.mycomponent.ts

恢复,在应用程序的不同组件中调用导入时会弹出错误消息。