2016-03-07 24 views
68

Nếu tôi muốn hàm x xảy ra mỗi khi thành phần tải, cho dù đó là lần đầu tiên, tôi điều hướng đến một trang khác và điều hướng trở lại hoặc là lần thứ năm thành phần đã tải.Cấu trúc góc 2 thành phần Vs OnInit

Tôi nên đặt chức năng x vào là gì? Trình tạo thành phần hoặc OnInit?

Trả lời

70

Constructor là phương pháp mặc định được xác định trước của lớp nguyên cảo. Không có mối quan hệ nào giữa Angular và constructor. Thông thường, chúng tôi sử dụng constructor để xác định/khởi tạo một số biến, nhưng khi chúng tôi có các nhiệm vụ liên quan đến các ràng buộc của Angular, chúng tôi chuyển sang móc vòng đời ngOnInit của Angular. ngOnInit được gọi ngay sau lệnh gọi hàm tạo. Chúng ta cũng có thể làm công việc tương tự trong hàm tạo nhưng thích hợp hơn để sử dụng ngOnInit để bắt đầu ràng buộc của Angular.

để sử dụng ngOnInit chúng ta phải nhập khẩu móc này từ thư viện lõi:

import {Component, OnInit} from '@angular/core' 

Sau đó, chúng tôi thực hiện giao diện này với lớp xuất khẩu (điều này là không bắt buộc phải thực hiện giao diện này nhưng nhìn chung chúng tôi đã làm).

Ví dụ về sử dụng cả hai:

export class App implements OnInit{ 
    constructor(){ 
    //called first time before the ngOnInit() 
    } 

    ngOnInit(){ 
    //called after the constructor and called after the first ngOnChanges() 
    } 
} 

Để cụ thể hơn xem thêm Difference between Constructor and ngOnInit

+1

Nhưng bạn không trả lời câu hỏi thực tế. cái nào chúng ta nên sử dụng trong trường hợp này ..? –

+3

ngOnInit không được gọi ngay sau khi gọi hàm tạo, giữa chúng có ngOnChanges: https://angular.io/guide/lifecycle-hooks – Hazlo8

22

Người đầu tiên (nhà xây dựng) có liên quan đến việc khởi tạo lớp và không liên quan gì đến Angular2. Tôi có nghĩa là một nhà xây dựng có thể được sử dụng trên bất kỳ lớp học. Bạn có thể đặt vào nó một số xử lý khởi tạo cho cá thể mới được tạo ra.

thứ hai tương ứng với một cái móc vòng đời của các thành phần Angular2:

  • ngOnChanges được gọi khi một đầu vào hoặc đầu ra giá trị ràng buộc thay đổi
  • ngOnInit được gọi sau khi người đầu tiên ngOnChanges

Vì vậy, bạn nên sử dụng ngOnInit nếu việc xử lý khởi tạo hàm của bạn dựa trên các ràng buộc của thành phần (ví dụ các tham số thành phần được xác định với @Input), nếu không, hàm tạo sẽ đủ ...

+0

Có bất kỳ tình huống mà sử dụng 'ngOnInit' qua các nhà xây dựng sẽ là xấu? – dman

14

constructor() là tính năng kiểu chữ và được gọi là new SomeClass(). Hàm khởi tạo đảm bảo thứ tự khởi tạo trường thích hợp trong phân cấp lớp.

ngOnInit là một phương pháp vòng đời Angular2 được gọi là Góc khi nó được xây dựng thành phần và sau khi nó đánh giá các ràng buộc và cập nhật các đầu vào lần đầu tiên.

Xem thêm Difference between Constructor and ngOnInit

+0

Bạn là 100% đúng và tôi upvote cho bạn. Trong tâm trí của tôi, nếu chúng ta mô tả 'ngOnInit' như là 'componentDidMount' của React, mọi sự nhầm lẫn sẽ biến mất. Nhưng thành thật mà nói, đối với các nhà phát triển, chúng tôi chỉ cần chỉ có một cụm từ khởi tạo, bất kể nó được gọi là gì. Cách thời trang rất cũ là sử dụng một chức năng như lớp học để xây dựng một lớp thành phần, do đó, tiêm được thông qua như là đối số trong và bạn chỉ cần một '$ onInit'. Ng2 + không phải là một tác phẩm nghệ thuật đẹp. – stanleyxu2005

+0

Hàm tạo là một tính năng ngôn ngữ TypeScript với các hạn chế nhất định. Không có gì Angular có thể làm aboit nó. –

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