Я новичок в angular2 и работаю над базовым дизайном, чтобы показать список продуктов и позволить пользователю добавлять новый элемент и редактировать существующий элемент. Для каждой строки есть кнопка редактирования, которая будет извлекать данные строки и отображать ее в текстовых областях. Для добавления и изменения я пытаюсь использовать один и тот же компонент. Добавить параметр работает отлично (используя ngModel), и он публикует данные на сервере без каких-либо проблем, но когда я нажимаю кнопку редактирования, данные не удаляются на странице modifyoptions.component. Если я нажму на другие строки, он начнет работать правильно. Если я удалю ngModel из файла modifyoptions.component.html, он отлично работает.Angular2 reusable добавить и отредактировать компоненты
Это мой файл modifyoptions.component.html.
<label>Price</label>
<input type = "text" id = "itemPrice" value = {{dataToEdit.price}} [(ngModel)] = "newItemData.price">
<label>Name</label>
<input type = "text" id = "itemName" value = {{dataToEdit.name}} [(ngModel)] = "newItemData.name">
<label>Brand</label>
<input type = "text" id = "itemBrand" value = {{dataToEdit.brand}} [(ngModel)] = "newItemData.brand">
<label>Description</label>
<input type = "text" id = "itemDescription" value = {{dataToEdit.description}} [(ngModel)] = "newItemData.description">
<button type="button" id = "btnSaveItem" (click) = "addNewItems()"
class="navbar-toggle collapsed"
data-toggle="collapse">
Save</button>
modifyoptions.component.ts
import { Component, OnInit ,Input} from '@angular/core';
import {FetchDataService} from '../Services/fetch-data.service';
@Component({
selector: 'app-modifyoptions',
templateUrl: './modifyoptions.component.html',
styleUrls: ['./modifyoptions.component.css']
})
export class ModifyoptionsComponent implements OnInit {
constructor(public fetchDataSvc : FetchDataService) {
}
ngOnInit() {
}
newItemData:any = {};
@ Input() dataToEdit:any;
addNewItems(){
console.log(this.newItemData);
this.fetchDataSvc.modifyListOfProducts(this.newItemData)
.subscribe((result) => {console.log(result)},
error => {
console.log(error);
});
}
}
Мой список продуктов файл, в котором я добавляю строку и получения значения при редактировании product.component.html
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>#</th>
<th>id</th>
<th>Price</th>
<th>Name</th>
<th>Brand</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of jsonProductList" >
<td>#</td>
<td>{{item._id}}</td>
<td>{{item.price}}</td>
<td>{{item.name}}</td>
<td>{{item.brand}}</td>
<td>{{item.description}}</td>
<td><button type="button" id = "btnEditItem" (click) = "showEditDialog(item)"
class="navbar-toggle collapsed"
data-toggle="collapse">
Edit</button></td>
</tr>
</tbody>
</table>
<div *ngIf="showEditFlag==true">
<app-modifyoptions [dataToEdit] = "item"></app-modifyoptions>
</div>
Файл компонента:
import { Component, OnInit } from '@angular/core';
import {FetchDataService} from '../Services/fetch-data.service';
@Component({
selector: 'app-product',
templateUrl: './product.component.html',
styleUrls: ['./product.component.css']
})
export class ProductComponent implements OnInit {
jsonProductList : any;
showEditFlag = false;
item :any;
// component is already loaded but line 18 will be executed based on the server response.
constructor(fetchDataSvc : FetchDataService) {
fetchDataSvc.getListOfProducts().subscribe((result) => {console.log(this.jsonProductList = result)},
error => {
console.log(error);
});
}
ngOnInit() {
}
showEditDialog(item){
this.showEditFlag = true;
this.item = item;
console.log(item);
}
}
Почему вы используете 2 разных задания? 'value = {{dataToEdit.price}} [(ngModel)] =" newItemData.price "'. Также вам не хватает котировок по вашему значению. Это должно быть так: 'value =" {{dataToEdit.price}} "' – Aer0
Этот компонент является общим для добавления и редактирования. с ngModel я получаю входное значение из текстовой области и отправляю его на сервер. со значением = {{dataToEdit.price}} Я заполняю текстовые области одного и того же компонента, когда редактирование нажимается на строку.Двойные кавычки не требуются, так как я получаю данные из файла .ts с помощью {{}} –