【问题标题】:Typescript angular 5 observable can not get value from inputTypescript angular 5 observable 无法从输入中获取值
【发布时间】:2018-10-01 06:25:41
【问题描述】:

我是打字稿的新手。而且我不知道为什么我的 post 变量不能根据输入而改变。

home.component.html

<input type="text" [(ngModel)]="linearsvcParameters.C"/>
<button (click)="TrainModel()" type="button" >TRAIN MODEL
</button>

home.component.ts

public linearsvcParameters: LinearsvcParameter = new LinearsvcParameter(); //this value cant change

public TrainModel(){
this.clfService.TrainModel(this.linearsvcParameters).subscribe((modelAccuracy => {  
  this.modelAccuracy = modelAccuracy;
  console.log(modelAccuracy);
}));

}

ClfService.service.ts

    public TrainModel(linearsvcParameters: LinearsvcParameter): Observable<ModelAccuracy>{        
    console.log('classification.ts' + LinearsvcParameter);
    return this.http.post<ModelAccuracy>(SERVER_URL + 'train', linearsvcParameters);

}

Linearsvc 类

export class LinearsvcParameter{
C: number = 0.1; //default value, i want this value change depend on input home.component.html

}

你能帮我看看这里有什么问题吗?

【问题讨论】:

  • 所以你是说 this.linearsvcParameters 没有在按钮点击时更新?
  • 只是这个在html(组件html)中并告诉我结果是C改变了{{linearsvcParameters.C}}
  • 是的,你没有更新按钮点击@Everett

标签: angular typescript observable


【解决方案1】:

据我所知,问题不在 TS 中,而是在您使用 Observable 的方式上。您应该在构造函数或NgOnInit 方法中订阅Observable。 之后,您将能够使用从 observable 传递到属性的值。

【讨论】:

  • 点击按钮进行网络调用并订阅它没有任何问题
  • 我在这个导出类 HomeComponent 中的 trainmodel 方法实现了 OnInit {}
  • @Everett,我不这么认为。
  • @user3134652,很好,将订阅移至 ngOnInit。
  • 你是对的,我的代码没有问题,谢谢老兄! @埃弗雷特
【解决方案2】:

这个问题是你绑定到对象linearsvcParameters中的C属性,

[(ngModel)]="linearsvcParameters.C"

但是当响应从服务到达时,您并没有更新该属性,而是 this.modelAccuracy = modelAccuracy;

您必须选择绑定到您的home.componentthis.modelAccuracy 属性或在订阅中更新该属性。

this.linearsvcParameters.C = modelAccuracy;

更新 您拥有的另一个选项是将绑定更改为您正在更新的属性。

[(ngModel)]="modelAccuracy"

让我知道它是如何工作的!

【讨论】:

  • 我的逻辑是,我需要更新 this.modelAccuracy 值,这就是为什么 this.modelAccuracy = modelAccuracy。如果我绑定到 this.linearsvcParamters.C 我的值 C 可以更改为 modelAccuracy 值。
  • 然后,将绑定更改为该属性,我更新了答案。
  • 感谢@Luillyfe!你打开了我的思路,我的错误是我忘了导入表单模块,大错特错。问题是我无法获取输入值并将其传递给 linearsvcParameters.C。
【解决方案3】:

问题已解决,感谢回复。我忘了添加表单模块,所以我将此模块添加到 app.module.ts

import {FormsModule, ReactiveFormsModule} from "@angular/forms";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2022-12-14
    • 2019-02-17
    • 2020-12-19
    相关资源
    最近更新 更多