【问题标题】:Is there a way to update an ngModel from within the component?有没有办法从组件内更新 ngModel?
【发布时间】:2021-09-11 00:18:50
【问题描述】:

我目前正在处理一个 Angular 项目,我的文件最初看起来如下:

dog.ts:

export interface Dog {
   name: string;
   age: number;
   breed: string;
}

dog.component.ts:

import { Dog } from '../dog';

@Component({
//setup stuff
})

export class DogComponent implements OnInit {
   dog: Dog = {
      name: "",
      age: 0,
      breed: ""
   };

constructor() {}

method(dog: Dog): void {
   //methods with headers similar to above that use the passed dog object
}

dog.component.html:

<div class="input">
   <div>
      <label for="name">Name: </label>
      <input id="name" [(ngModel)]="dog.name" placeholder="name">
   </div>
   <div>
      <label for="age">Age: </label>
      <input id="age" [(ngModel)]="dog.age" placeholder=0>
   </div>
   <div>
      <label for="breed">Breed: </label>
      <input id="breed" [(ngModel)]="dog.breed" placeholder="breed">
   </div>
</div>

<button class="method" (click)="method(dog)">
   Use Method
</button>

<!--more buttons calling various functions -->

但是,我现在正在删除 .html 文件中的输入字段,并将它们替换为不同模型的单个输入,如下所示:

dog.component.html:

<div class="input">
   <div>
      <label for="place">Name: </label>
      <input id="place" [(ngModel)]="ranking.place" placeholder="place">
   </div>
</div>

<!-- Same buttons as before -->

然后我创建了一个服务,给定一个排名对象,它将发出一个 GET http 请求并返回一个 dog 对象。所以我现在想在我的 dog.component.ts 文件中创建一个方法,在给定排名时更新狗模型。所以是这样的:

dog.component.ts:

import { Dog } from '../dog';
import { Ranking } from '../ranking';

@Component({
//setup stuff
})

export class DogComponent implements OnInit {
   dog: Dog = {
      name: "",
      age: 0,
      breed: ""
   };

   ranking: Ranking = {
      place: 0,
   };

constructor() {}

updateDogComponenet(ranking: Ranking): void {
   //FILL IN THIS METHOD
   //insert a call to serviceFunction that takes a ranking and returns a dog
   //update the ngModel dog object so that it can be used in other functions
}

method(dog: Dog): void {
   //methods with headers similar to above that use the passed dog object
}

我为所有代码道歉,但如果有人有任何想法,将不胜感激!

【问题讨论】:

    标签: javascript html node.js angular typescript


    【解决方案1】:

    我不确定您的应用程序的目的是什么,但解决问题的一种方法是找到逻辑路径。

    你必须有一个对狗进行排名的系统,也许你可以在 Dog 类中添加一个“points”或“score”属性。

    export class Dog {
       name: string;
       age: number;
       breed: string;
       score: number;
    }
    

    然后根据分数,你可以对狗进行降序排序(得分最多的狗将是第一个)。

    在这种情况下,您不需要 Ranking 类,您可以使用您拥有的 Dog 对象数组,并按 score 属性对数组进行排序,然后将其显示在 HTML 中。

    我不确定这是否会对您有所帮助,因为我没有您的应用程序的完整上下文,但我告诉您我将如何处理该问题。

    【讨论】:

    • 我考虑过这种方法,但是如果我有一个方法可以使用排名/分数作为参数对数据库进行 HTTP 调用并返回一个包含所有字段的狗对象,我'我不确定我如何能够在其他方法中使用完成的狗对象。我可以在所有其他方法中调用该方法,但这似乎会是很多多余的 GET 调用。我想我的问题是我只是不确定如何存储其他字段。
    • 等等,我刚刚发现我可以使用这个。关键字来更新我的狗对象。解决了!我会给你支票,以帮助你解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2014-10-16
    • 1970-01-01
    相关资源
    最近更新 更多