2017-03-18 21 views
6

Tôi đang thử nghiệm với Angular2 và Vật liệu góc. Tôi đã sử dụng *ngFor để cho Angular tạo các phần tử <input> cho tôi. Tuy nhiên, trong trang web kết quả, phần tử được tạo không có thuộc tính name.Angular2 ràng buộc thuộc tính "name" trong <input> các phần tử có * ngFor

Đây là một phần của mã trong order-form.component.html, mà yêu cầu người dùng nhập số loại khác nhau của các loại trái cây:

<md-list-item> 
    <md-icon md-list-icon>shopping_cart</md-icon> 
    <md-input-container *ngFor="let fruit of fruits" class="fruit-input"> 
    <input mdInput [(ngModel)]="order[fruit]" [placeholder]="capitalize(fruit)" 
      [id]="fruit" name="{{fruit}}" required value="0" #fruitInput 
      (input)="onInput(fruitInput)"> 
    </md-input-container> 
</md-list-item> 

Đây là tương ứng order-form.component.ts:

import { Component, OnInit } from "@angular/core"; 
import { Order } from "app/order"; 
import { PAYMENTS } from "app/payments"; 
import { OrderService } from "app/order.service"; 

@Component({ 
    selector: 'app-order-form', 
    templateUrl: './order-form.component.html', 
    styleUrls: ['./order-form.component.css'] 
}) 
export class OrderFormComponent implements OnInit { 

    order = new Order(); 

    payments = PAYMENTS; 

    fruits: string[] = [ 
    'apples', 
    'oranges', 
    'bananas' 
    ]; 

    constructor(public service: OrderService) { 
    } 

    ngOnInit() { 
    } 

    get totalCost() { 
    return this.service.getTotalCost(this.order); 
    } 

    onFocus(element: HTMLElement) { 
    element.blur(); 
    } 

    onSubmit() { 
    console.log('onSubmit'); 
    } 

    onInput(element: HTMLInputElement) { 
    console.log(element); 
    if (!this.service.isValidIntString(element.value)) { 
     window.alert(`Please input a correct number for ${element.name}`); 
     element.value = '0'; 
    } 
    } 

    capitalize(str: string): string { 
    return this.service.capitalize(str); 
    } 

    get debug() { 
    return JSON.stringify(this.order, null, 2); 
    } 
} 

Trong Chrome trình duyệt, khi tôi nhấp chuột phải vào 'quả táo' <input>, thuộc tính name của phần tử trống, nhưng ng-reflect-name được đặt thành apples chính xác? Làm thế nào để giải quyết vấn đề này? No name attribute here, but ng-reflect-name is apples

+0

bạn có gặp phải bất kỳ lỗi nào không? – Aravind

+0

@Aravind Từ bảng điều khiển bên dưới, không có lỗi. –

Trả lời

9

câu trả lời chính thức

sử dụng ([name]="fruit" hoặc name="{{fruit}}") và ([attr.name]="fruit" hoặc attr.name="{{fruit}}") cùng sẽ làm việc.

cập nhật

Nếu bạn muốn sử dụng chuỗi 'fruit' như giá trị cho các thuộc tính name, sử dụng

name="fruit" 

hoặc

name="{{'fruit'}}" 

hoặc [name] = "' quả ''

nếu không bạn ràng buộc giá trị của các thành phần lĩnh vực fruit (mà thành phần của bạn dường như không có)

gốc

góc không sở hữu ràng buộc theo mặc định. Nếu bạn muốn thuộc tính ràng buộc bạn cần phải chắc rằng rõ ràng

attr.name="{{fruit}}" (for strings only) 

hoặc

[name]="fruit" 

Xem thêm

+0

Khi tôi sử dụng 'attr.name = "{{fruit}}" 'trình duyệt sẽ cho tôi lỗi: Nếu ngModel được sử dụng trong thẻ biểu mẫu, thuộc tính name phải được đặt hoặc điều khiển biểu mẫu phải được định nghĩa là 'standalone' trong ngModelOptions. Khi tôi sử dụng '[name] =" fruit "' kết quả không thay đổi chút nào. –

+0

Sau đó, vấn đề là cái gì khác. Vì vậy, bạn không thực sự quan tâm đến thuộc tính 'name' đang được thêm vào' ', bạn chỉ muốn' ngModel' hoạt động? –

+0

Tôi nghĩ bạn thực sự muốn 'name =" fruit "' –

Các vấn đề liên quan