我已用最少的代码在StackBlitz上重现了该问题。
第1步:点击文字
第2步:关注文本字段
第3步:输入enter并检查控制台中的错误
错误:ExpressionChangedAfterItHasBeenCheckedError:表达式具有 检查后更改。先前的值:“ ng-untouched:true”。 当前值:“ ng-untouched:false”。
答案 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
要恢复,在应用程序的不同组件中调用导入时会弹出错误消息。