2

angular2 で最初のアプリを作成していますが、 formBuilderを使用して最初のエンティティ更新フォームになると、ジレンマに直面しています。作業フォームを作成しましたが、ベスト プラクティスに適合するかどうかはまだわかりません。

私のオブジェクトはmongoDbコレクションから来ています。2 つの単純なテキスト プロパティを持つオブジェクトの費用。

これが私がコントローラーで行うことです。

import {Component, View} from 'angular2/core';

import {RouteParams} from 'angular2/router';

import {Expenses} from 'collections/expenses';

import {RouterLink} from 'angular2/router';

import {Router} from 'angular2/router';

import {FormBuilder, Control, ControlGroup, Validators} from 'angular2/common';

@Component({
    selector: 'expense-details'
})
@View({
    templateUrl: '/client/expense-details/expense-details.html',
    directives: [RouterLink]
})
export class ExpenseDetails {
    expenseForm:ControlGroup;
    expenseId;


    constructor(params: RouteParams, private router: Router) {
        this.expenseId= params.get('expenseId');
        var expense = Expenses.findOne(this.expenseId);

        var fb = new FormBuilder();
        this.expenseForm = fb.group({
            label:[expense.label, Validators.required],
            description:[expense.description]
        })
    }

    saveExpense(expense){
        console.log(this.expenseForm.valid);
        console.log(expense);
        if(this.expenseForm.valid){
            Expenses.update(this.expenseId, {
                $set:{
                    label:expense.label,
                    description:expense.description
                }
            })
            this.router.navigate(['ExpensesList']);
        }
    }
}

これは正しい動作ですか?

4

1 に答える 1

1

コンストラクターだけが知っている変数に費用を保存しています。save メソッドでアクセスできるように、それをコンポーネント プロパティとして設定する必要があります。

ベスト プラクティスについては、単純に区別できるように、private _router: Router のように、最初に _ を付けてプライベート プロパティに名前を付けるのが一般的な方法です。

また、ベータ版以降はもう見ていません。すべての公式の例で@Viewは、常に templateUrl、ディレクティブ、およびタグ内のすべてのプロパティを使用しています。@Component

また、ngModel を使用して、公開された「経費」オブジェクトのプロパティをフォームにバインドする必要があります。

これがあなたが望んでいた種類の入力であるかどうかはわかりませんが、役に立てば幸いです.

于 2016-01-10T01:50:13.347 に答える