2017-08-30 52 views
0

我需要編輯功能幫助。當我點擊編輯按鈕時,我需要將這些項目加載到表單中。這就是我的應用程序的工作方式,首先,有一個用戶列表,然後您可以單擊該特定用戶的「查看更多」按鈕,它會將您重定向到一個新頁面。在新的頁面中,你會發現「編輯按鈕」所以我試圖通過選擇它與聯繫人編號做我的編輯功能,因爲我沒有索引,因爲它是一個對象。只有一個問題,那就是我如何加載編輯表格中的項目?我相信這是一個非常簡單的問題,但我對此感到困惑。如果您有更好的解決方案,請幫助我。將表單中的項加載到角度編輯

用戶detail.component.ts

export class UserDetailComponent implements OnInit { 

    user: User; 
    id: number; 

    constructor(private userService: UserService, 
       private route: ActivatedRoute, 
       private router: Router) { } 

    ngOnInit() { 
    this.route.params 
    .subscribe((params: Params) => { 
     this.id = +params['id']; 
     this.user = this.userService.getUser(this.id); 
    }); 
} 

    onEditDetail(index: number) { 
    this.router.navigate(['users', this.id, 'edit']); 
    } 

} 

用戶edit.component.html

<div class="card-block"> 
     <form (ngSubmit)="onUpdateUser(f)" #f="ngForm"> 
     <div class="form-group"> 
      <label for="First Name">First Name</label> 
      <input type="text" class="form-control" [(ngModel)]="user.f_name" name="f_name" ngModel required> 
     </div> 
     <div class="form-group"> 
      <label for="Last Name">Last Name</label> 
      <input type="text" class="form-control" [(ngModel)]="user.l_name" name="l_name" ngModel required> 
     </div> 
     <div class="form-group"> 
      <label for="Contact Number">Contact Number</label> 
      <input type="number" class="form-control" [(ngModel)]="user.contact_no" name="contact_no" ngModel required pattern="^[1-9]+[0-9]*$"> 
     </div>  
     <button class="btn btn-warning pull-right" [disabled]="!f.valid"><i class="fa fa-download" aria-hidden="true"></i> Update</button> 
     </form>  
    </div> 

用戶edit.component.ts

export class UserEditComponent implements OnInit { 
    @ViewChild('f') editForm: NgForm; 
    user: User; 
    id: number; 


    constructor(private userService: UserService, 
       private route: ActivatedRoute, 
       private router: Router) { } 

    ngOnInit() { 
    this.route.params 
    .subscribe((params: Params) => { 
     this.id = +params['id']; 
     this.user = this.userService.getUser(this.id); 
    }); 
    } 


    onUpdateUser(form: NgForm) { 
     const value = form.value; 
     const updatedUser = new User(value.f_name, value.l_name, value.contact_no); 
     alert("Successfully Updated"); 
     this.router.navigate(['users', this.id]); 
     } 
} 

user.service.ts

import { User } from './user.model'; 
import { Subject } from 'rxjs/Subject'; 
export class UserService { 

usersChanged = new Subject<User[]>(); 

    private users: User[]= [ 
    new User('Harry', 'James', 99999889), 
    new User('Thomas', 'Baker', 99638798) 
    ]; 

    getUsers() { 
    return this.users.slice(); 
    } 

    getUser(index: number) { 
    return this.users[index]; 
    } 

    addUser(user: User){ 
    this.users.push(user); 
    this.usersChanged.next(this.users.slice()); 
    } 

    deleteUser(index: number){ 
    this.users.splice(index, 1); 
    this.usersChanged.next(this.users.slice()); 
    } 

} 
+0

據我所知,'this.editForm.setValue'語法僅供反應形式。但是你似乎在使用模板驅動的表單。 – DeborahK

+0

@DeborahK。那麼什麼是模板驅動的equiavalent? – Joseph

+0

在下面使用ngModel綁定作爲@mok提及。 – DeborahK

回答

1

可以使用雙向綁定加載數據,反映的是UI的數據的任何改變的時候了。在你的情況,例如,你可以做這樣的:

首先,進口FormsModule到您的模塊:

import { FormsModule } from '@angular/forms'; // <--- JavaScript import from Angular 

@NgModule({ 
    imports: [ 
    .... 
    FormsModule // <--- import into the NgModule 
    .... 
    ], 

然後使用它是這樣的:

<input type="text" [(ngModel)]="f_name" class="form-control" name="f_name"> 

假設你有組件中的變量f_name將加載f_name的初始值並將包含其更新的值。

請注意確切的[()]符號,它使雙向綁定。

有關更多詳細信息,請參閱this KB

+0

我認爲這不是一種正確的方式,因爲我來自用戶細節並將其加載到用戶編輯表單 – Joseph

+0

如果您使用的是模板驅動的表單(不是反應形式),那麼是的,使用ngModel綁定(如圖所示)這裏是從組件向模板獲取數據的正確方法。 – DeborahK

0

如果使用ngModel結合,通過@mok提到的,那麼你的編輯代碼可以像你的詳細信息代碼:

user: User; 

    ngOnInit() { 
    this.route.params 
    .subscribe((params: Params) => { 
     this.id = +params['id']; 
     this.user = this.userService.getUser(this.id); 
    }); 

屬性將自動採用了棱角分明的雙向的形式出現在用戶數據綁定。 this.user也會自動用用戶輸入的值更新。

更多信息請參見該角文檔:https://angular.io/guide/forms

+0

這不是堆棧溢出的工作原理。 :-)隨意編輯你的問題,以澄清你的代碼現在看起來像什麼。或者,如果您被困在另一個主題上,請發佈一個新問題。 – DeborahK

+0

我也可以爲你推薦一門課程:https://app.pluralsight.com/library/courses/angular-2-forms/table-of-contents你可以註冊一個免費的一週。 – DeborahK

+0

嗨黛博拉,我已經編輯了編輯功能,現在工作正常。問題是我想使用該服務來更新用戶及其信息,就像我對添加和刪除功能所做的一樣。我該如何改進?謝謝 – Joseph