【问题标题】:Pass object reference to Angular2 Component to be used in ngModel将对象引用传递给 Angular2 组件以在 ngModel 中使用
【发布时间】:2017-03-12 04:37:55
【问题描述】:

我有一个内部包含此代码的组件:

<div class="form-group">
    <label for="title">Title</label>
    <input type="text" [(ngModel)]="model.title" name="title" required/>
</div>

我正在尝试将整个东西迁移到另一个组件中,input-component

@Component({
    selector: 'input-component',
    template: `
        <div class="form-group">
            <label for="title">Title</label>
            <input type="text" [(ngModel)]="value" name="title" required/>
        </div>
    `
})
export class InputComponent {
    @Input() value: string;
}

所以第一个示例代码将替换为:

<input-component [value]="model.title"></input-component>

model.title改变时,HTML元素内部的值改变了,但是当我改变元素的内容时,model.title没有改变。

如何使用此设置实现双向数据绑定?

【问题讨论】:

    标签: javascript angular typescript data-binding


    【解决方案1】:

    更好的方法是,

    <input-component [(value)]="model.title"></input-component>
    

        <input type="text" [(ngModel)]="value" name="title" 
                           (keyup)="update(value)" required/>      ///<<<### keyup
    
    
        export class InputComponent {
            @Input() value: string;
            @Output  valueChange:EventEmitter=new EventEmitter();  ///<<<### added
    
           update(value){
               this.valueChange.emit(value);
           }
        }
    

    【讨论】:

    • 为什么这样更好(依赖keyup而不是ngModelChange)?
    • 哎呀!我没有正确看到你的答案。你的更好,没有问题。
    【解决方案2】:

    我需要创建一个EventEmitter 来执行此操作:

    @Component({
        selector: 'input-component',
        template: `
            <div class="form-group">
                <label for="title">Title</label>
                <input type="text" [ngModel]="value" (ngModelChange)="onInput($event)" name="title" required/>
            </div>
        `
    })
    export class InputComponent {
        @Input() value: string;
        @Output() valueChange = new EventEmitter();
    
        public onInput(event: string) {
            this.value = event;
            this.valueChange.emit(event);
        }
    }
    

    【讨论】:

    • @PankajParkar 如果没有EventEmitter,它将无法工作。
    • @micronyks 原谅我,我想的是另一种方式 :) 谢谢你让我知道
    猜你喜欢
    • 2017-05-12
    • 2017-07-27
    • 2018-07-15
    • 2023-03-26
    • 2018-07-11
    • 1970-01-01
    • 2016-05-10
    • 2021-06-27
    • 2023-03-30
    相关资源
    最近更新 更多