如何在angular2中改变模型的值

How to change value of model in angular2?

本文关键字:模型 改变 angular2      更新时间:2023-09-26

EDIT 1

我的代码是:

Modal.ts

import {Component, NgIf, FORM_DIRECTIVES} from 'angular2/angular2';
declare function initMaterial();
@Component({
    selector: 'modal',
    directives: [NgIf, FORM_DIRECTIVES],
    templateUrl: './frontend/components/modal/modal.html',
    styleUrls: ['./frontend/components/modal/modal.css']
})
export class Modal {
    public isOpen: boolean = false;
    public dtCompromise: Date;
    constructor() {
        this.dtCompromise = new Date();
    }
    open() {
        this.isOpen = true;
        initMaterial();
    }
    close() {
        this.isOpen = false;
    }
}

Modal.html

<div class="card-wide mdl-card mdl-shadow--2dp modal" *ng-if="isOpen">
    <div class="mdl-card__title">
        <h2 class="mdl-card__title-text">Novo compromisso</h2>
    </div>
    <div class="mdl-card__supporting-text">
        <form action="#">
            <div class="mdl-textfield mdl-js-textfield">
                <input class="mdl-textfield__input" type="date" [(ng-model)]="dtCompromise"/>
                <label class="mdl-textfield__label" for="dtCompromisse">Data</label>
            </div><br>
            <div class="mdl-textfield mdl-js-textfield">
                <textarea class="mdl-textfield__input" type="text" rows= "5" [(ng-model)]="dsCompromise"></textarea>
                <label class="mdl-textfield__label" for="dsCompromisse">Descrição</label>
            </div>
        </form>
    </div>
    <div class="mdl-card__actions mdl-card--border">
        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--colored" (click)="save($event, dsCompromise, dtCompromise);">
            Salvar <i class="material-icons">save</i>
        </button>
    </div>
    <div class="mdl-card__menu">
        <button class="mdl-button mdl-js-button mdl-js-ripple-effect" (click)="close()">
            <i class="material-icons">close</i>
        </button>
    </div>
</div>

在构造函数中,我尝试将变量dtCompromise初始化为this。. dtCompromise = new Date();但在此之后,值是未定义的。有什么建议吗?

我发现了问题所在。Angular2忽略type="date"的输入。改变类型后的文字为我工作。现在的问题是。要使用一个字段作为日期,必须使用日期拾取器。我使用material-design- life作为框架响应。它不包含日期选择器来修复此问题。将有必要使用jquery日期拾取器。对我来说是一个大的反模式。如果你使用angular2,这将促进开发所需的全部资源。我对它很失望。

遗憾的是,NgModel此时对date类型的input不起作用。然而,我发现了一个简单的解决方法。

// In your HTML
<input #myDatePicker 
    type="date" 
    value='{{ myDate | date:"yyyy-MM-dd" }}' 
    (input)="onInput(myDatePicker.value)" />
// In your component (TypeScript):
public myDate: Date;
public onInput(value: Date): void{
    this.myDate = value;
}

这为您提供了一种在组件上设置myDate属性值的方法。我个人更喜欢这样,而不是使用别人的自定义选择器,从而产生依赖。

ngModel不工作,但ngModelChange为我工作:

<input class="form-control" type="date" [ngModel]="myDate.value" 
       value="{{myDate.value | date:'yyyy-MM-dd'}}" (ngModelChange)="myDate.value=$event">

我发现了问题所在。Angular2忽略type="date"的输入。改变类型后的文字为我工作。现在的问题是。要使用一个字段作为日期,必须使用日期拾取器。我使用material-design- life作为框架响应。它不包含日期选择器来修复此问题。将有必要使用jquery日期拾取器。对我来说是一个大的反模式。如果你使用angular2,这将促进开发所需的全部资源。我对它很失望。

为了解决这个问题,我使用了自定义日期选择器:https://github.com/emirdeliz/meus-projetos/tree/master/angular2-schedule/app/frontend/components/datepicker

是的,我们可以选择使用

<input type="date" [(ngModel)]="company.birthdate"/>

用于获取项目的日期。但是,是的,这是不兼容的多浏览器平台(如mozilla),有许多跨浏览器库的相同。

我用Bootflat制作了一个时尚的日历日期选择器

https://github.com/MrPardeep/Angular2-DatePicker

希望这能给你更时尚的多浏览器日期选择器