【问题标题】:Angular form not sending updated values角形式不发送更新的值
【发布时间】:2020-03-29 10:53:56
【问题描述】:

我是 Angular 新手,尝试通过表单提交发送值,如果我使用输入文本框进行更改,表单可以正常工作并发送更新的值,但如果尝试使用 java-script 更改值,它不会检测到更新的值。请帮忙

<form  #mapFrm = "ngForm" (ngSubmit) = "onClickSubmit(mapFrm)" >
 <input type="text" class="form-control" ngModel    name="lat" required />
</form> 

示例: https://stackblitz.com/edit/angular-1ehuzw

【问题讨论】:

标签: angular


【解决方案1】:

从您提供的 HTML 代码看来,您使用的是Template-driven forms

对于模板驱动的表单,双向数据绑定是在表单中设置值的推荐方式。

<form  #mapFrm="ngForm" (ngSubmit)="onClickSubmit(mapFrm)" >
 <input type="text" class="form-control" [(ngModel)]="yourLatValue" name="lat" required />
</form> 

其中yourLatValue 是包含表单的组件的公共属性。

我使用您的代码的工作示例创建了这个StackBlitz Demo,以便您可以使用它。

【讨论】:

  • 感谢 Narm 的回复,但这就是我正在做的事情:stackblitz.com/edit/angular-1ehuzw
  • Angular 封装了它的组件,因此它不可能像您尝试使用 &lt;script&gt; 标记那样从组件外部访问表单值。此外,更重要的是,Angular 禁止在您的 HTML 中以您使用它的方式使用 &lt;script&gt; 标签。如果您尝试进行生产构建,您会发现它会失败,因为&lt;script&gt; 标签是被禁止的。
  • 有趣的是,如果你点击他的“Change Value By JS”按钮,输入的内容就会改变,但是如果你点击“Change value Using Angular”,这个新值不会显示/提交,但是而是旧值。我猜这是因为封装了@Narm 指的是!?
【解决方案2】:

当您使用 javascript 更改值时,实际上您是在操作 DOM 元素。这对角度值没有影响,即yourLatValue。由于提交方法是角度的一部分,所以它不起作用。

理想情况下,您不应该从外部以角度操纵任何东西。

【讨论】:

    【解决方案3】:

    同意拉利特。您实际上是在更改 DOM 元素。无论您在 DOM 中进行了多少更改。你不能得到你想要的值。除非你不改变你的角度反应形式。

    可能的解决方法是在 app.component.ts 中调用您的 changeValueByJs()

    changeValueByJs(){
     this.yourLatValue = "My Updated value from JS";
    }
    

    你可以使用上面的函数来实现它,你也可以使用 JavaScript 来改变它。

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 1970-01-01
      • 2019-03-06
      • 2019-05-05
      • 1970-01-01
      • 2020-07-12
      • 2018-05-27
      • 2011-08-17
      • 1970-01-01
      相关资源
      最近更新 更多