【问题标题】:Angular2 ngModel-var value does not same like this.var valueAngular2 ngModel-var 值与 this.var 值不同
【发布时间】:2016-11-02 08:25:13
【问题描述】:

我在子组件中的 ngModel 值有一些奇怪的行为。 html代码:

<input type="text" pattern="^[a-zA-Z]$"
                           class="form-control" required="true"
                           id="myId" 
                           [(ngModel)]="kName">

kName 是一个输入字段(@kName:string),将从父组件填充。 我可以看到“this.kName”每次都从父组件获取新值。 但是当我在这个字段上设置一些操作后:

this.kName = undefined;

然后我想再次从父级填充 kName,我的 kName-current 值不会出现在 html-output 上,但我可以看到:this.kName 当我尝试这样做时:

<input type="text" pattern="^[a-zA-Z]$"
                           class="form-control" required="true"
                           id="myId" 
                           [(ngModel)]="{{this.kName}}">

我通过 html-pattern 在init 上收到错误,因为 kName 未定义。 如何刷新我的 ngModel 值? 也许我还有其他问题...

【问题讨论】:

    标签: angular input ngmodel


    【解决方案1】:

    似乎你在任何地方都有另一个问题..

    您的控制台中是否有任何错误消息?

    看看这个 plunker,按预期工作:https://plnkr.co/edit/2VUOimDCMvPSNHD1mX69?p=preview

    您可以“清除”它并从父组件重写它..

    import {Component, NgModule, Input} from '@angular/core'
    import {FormsModule} from '@angular/forms'
    import {BrowserModule} from '@angular/platform-browser'
    
    @Component({
      selector: 'my-child',
      template: `
        <input [(ngModel)]="kName" />
        <button (click)="clearFunction()">clear</button>
        <br />
        {{kName}}
      `,
    })
    export class Child {
      @Input() kName: string;
    
      constructor() { }
    
      clearFunction() {
        this.kName = undefined;
      }
    }
    
    @Component({
      selector: 'my-app',
      template: `
        <div>
          <h2 (click)="changeSomething()">Hello {{name}}</h2>
          <my-child [kName]="myKname"></my-child>
        </div>
      `,
    })
    export class App {
      name:string;
      myKname: string;
    
      constructor() {
        this.name = 'Angular2'
      }
    
      changeSomething() {
        this.myKname = Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
      }
    }
    
    @NgModule({
      imports: [ BrowserModule, FormsModule ],
      declarations: [ App, Child ],
      bootstrap: [ App ]
    })
    export class AppModule {}
    

    【讨论】:

    • 谢谢。以你为例。您的按钮“清除”中的操作在模板中实现。我必须在我的子组件中执行此操作。因此,我尝试了 this.kName,导致无法找到子组件 ts 文件中的 kName。如何在我的 ts.file 中实现此按钮的操作:&lt;button (click)="kName = undefined;"&gt;clear&lt;/button&gt;
    • 第二个问题是,当我实现按钮“清除”时,我的 html 模式将失败。但它一开始就有效?? kName 也未定义,但我的 html 模式没有问题
    • 您也可以在您的 ts 文件中执行此操作,请参阅更新的答案和 plunker。
    • 谢谢。您可以使用 this-operator 访问变量“myKname”。在我的例子中,“myKname”是这样声明的:` @input myKname:string` 它可以工作,但由于某种原因,它在一种测试情况下不起作用。一定是bug,我现在没看到^^
    • myKname 是该父组件的属性。所以没有输入,但在子组件kName 中是@Input()。希望可以帮助您或澄清一些事情.. gl! :)
    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 2019-03-22
    • 2016-10-17
    • 1970-01-01
    • 2017-11-13
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多