angular - Dart Angular 形成原始/脏动态

标签 angular dart angular-dart

我有一个用户列表和用户详细信息组件,类似于教程中带有英雄列表/详细信息的设置,在列表中选择用户应该使其在详细信息组件中可编辑。问题是更改用户会使表单变脏。为了更清楚,这里是精简的代码:

@Component(...)
class UserDetail {
  @Input()
  User user;
  Future onSubmit() async {...}
}

模板如下:
<form (ngSubmit)="onSubmit()" #userEditForm="ngForm">
    <h2>{{user.name}}</h2>
    <input type="checkbox"
        id="is_happy"
        [(ngModel)]="user.is_happy"
        ngControl="is_happy"
        #is_happy="ngForm" />
    <div [hidden]="userEditForm.pristine">
        <material-button
            [disabled]="!userEditForm.valid"
            (trigger)="onSubmit()">
            Update
        </material-button>
    </div>
</form>

我想使表单仅在用户与控件交互时才脏,而不是在底层用户从外部更改时。

这样做的正确方法是什么?有没有办法在用户更改时重置表单?我还没有找到任何可以轻松使用来实现这个简单用例的东西。

最佳答案

很好的问题。

这是默认值访问器的一个不幸的副作用。它正在创建一个反馈循环,导致控件在写入时变脏。通知 line当一个值被写入输入时,它会在输入上引发一个“输入”事件。然后被捕获 here .然后导致在控件上调用更改函数,导致它变脏:(

那么你有什么选择:

  • 不要使用脏的,而是使用触摸的。这仅设置为模糊,因此它主要是由用户操作引起的。
  • 使用 angular_component 的 material-input 来监听 keypressonblur更改的事件而不是输入事件。
  • 编写您自己的 ControlValueAccessor,它是 DefaultValueAccessor 和上面链接的 Material 输入之间的混合体。通过混合,我的意思是它使用按键或模糊而不是“输入”作为 onChange 事件。

  • 希望有帮助!

    关于angular - Dart Angular 形成原始/脏动态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46225710/

    相关文章:

    dart - Angular.dart 的异步模块定义(AMD)?

    angular - 隐藏像 ngIf 这样的 Angular 2 Material 工具提示

    angular - 如何使用 Observable 在 Angular 中复制 promise 链?

    firebase - 在 Flutter 中添加记录时,Cloud Firestore 无法正确更新

    firebase - 尝试按用户uid firebase分离数据?

    dart - 如何在 Angular Dart 中制作动画?请告诉我

    javascript - typescript map : key and value swapped on iteration

    typescript - Angular2 组件未呈现

    dart - 如何防止对 Flutter Inkwell 进行多次触摸

    dart - 在 AngularDart 中的媒体更改时将应用程序布局抽屉持久更改为临时