2016-11-03 15 views
5

Tôi đang triển khai chức năng trong Angular2 yêu cầu sử dụng setTimeout.Angular2: setTimeout chỉ được gọi là

Mã của tôi:

public ngAfterViewInit(): void { 
    this.authenticate_loop(); 
    } 

    private authenticate_loop() { 
    setTimeout (() => { 
     console.log("Hello from setTimeout"); 
    }, 500) 
    } 

setTimeout được bắt đầu bởi ngAfterViewInit nhưng vòng lặp chỉ thực hiện một lần, ví dụ. "Hello fromsetTimeout" chỉ được in một lần.

Câu hỏi: Làm cách nào để thay đổi mã để thực hiện công việc setTimeout?

+1

Vì thời gian chờ chỉ chạy một lần ... – epascarello

+0

bạn có thể xem http://blog.neilni.com/2016/03/27/settimeout-in-angular-2/ –

+0

Chỉnh sửa câu hỏi của bạn thành góc 1 thay vì góc 2 , bạn đã chấp nhận câu trả lời sử dụng các dịch vụ góc 1. –

Trả lời

6
private authenticate_loop() { 
    setInterval (() => { 
     console.log("Hello from setInterval"); 
    }, 500) 
} 

setTimeout sẽ chỉ chạy một lần, trừ khi bạn tạo setTimeout khác.

3

Edit: Vì vậy, để cụ thể hơn cho các phiên bản góc cạnh khác nhau:

Trong Angular2 bạn không cần phải sử dụng $ timeout/$ khoảng nữa. Vì vậy, đối với câu hỏi ở đây setInterval là giải pháp đúng.

Đối với bất kỳ một quan tâm đến phản ứng ban đầu (nhắm mục tiêu đến Angular1) đọc phần sau đây:

Sử dụng $interval bên trong một ứng dụng angular.js.

Và nếu bạn muốn sử dụng setTimeout ở một nơi khác bên trong ứng dụng angular.js, bạn nên sử dụng dịch vụ $timeout.

$ timeout$ khoảng có lợi thế, mà họ giữ phạm vi của bạn được cập nhật, mà setTimeout/setInterval không.

+1

Câu trả lời của bạn là chính xác, nhưng các ví dụ được sử dụng là angular1. – Vingtoft

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