2015-02-19 25 views
6

Tôi đang làm việc trên dự án angularJs và typescript. Tôi phải thực hiện cuộc gọi http đồng bộ và nhận một số dữ liệu từ máy chủ trước khi tôi khởi chạy ứng dụng khách và tải giao diện người dùng của mình. Tôi tìm kiếm trên internet và thấy mọi người nói về lời hứa, huumm okay tại sao không. Vì vậy, tôi sử dụng lời hứa (gọi $ http và sử dụng $ q để trả lại lời hứa) trong app.run() của tôi. Có lẽ tôi đang bỏ lỡ không có gì bởi vì điều này là không làm việc cả. Angular launch app.config(), sau đó app.run(), ... Nhưng Angular không chờ app.config() kết thúc trước khi khởi chạy app.run(). Vì vậy, lời hứa đầu tiên của tôi là khởi động trong app.run() và trước khi nó giải quyết Angular cố gắng để nhanh chóng điều khiển ... Tôi không muốn tạo ra dịch vụ mới gọi httpSynchronous nhưng tôi không có bất kỳ ý tưởng khác.AngularJS hứa hẹn trong app.run()

+2

Cập nhật với một số mã xin vui lòng: D – Seth

+0

Bạn có thể chuyển cuộc gọi đồng bộ http sang ứng dụng của mình.run không? Sau đó, bạn có thể sử dụng mã của bạn mà phụ thuộc vào kết quả vào khối thành công. –

Trả lời

14

Góc không hỗ trợ các hành động không đồng bộ trong các chức năng .config.run. Nếu bạn muốn trì hoãn đơn đăng ký của mình, có 2 cách:

  • Đầu tiên là trì hoãn toàn bộ ứng dụng của bạn bằng cách sử dụng angular.bootstrap() để khởi động thủ công. Nhưng bất cứ điều gì bạn làm là bên ngoài góc cạnh, vì vậy bạn không có quyền truy cập vào bất cứ điều gì nhưng vani JavaScript.
  • Cách thứ hai là sử dụng thuộc tính giải quyết các tuyến đường của bạn. Nếu bạn sử dụng bộ định tuyến như angular route segment hoặc ui router, bạn có thể xác định tuyến đường/trạng thái hàng đầu có giải pháp sẽ được giải quyết khi ứng dụng của bạn tải (và nếu bạn buộc tải lại đầy đủ tuyến đường của mình).
+0

Cảm ơn câu trả lời của bạn nhưng tôi không thể sử dụng giải pháp đầu tiên, vì tôi phải gọi mutiple http và khởi tạo thành phần angularJs (dịch vụ, chỉ thị, ...) để giải pháp này rất xấu. Và tôi đã thấy giải pháp này trên internet nhưng đặt tất cả logic này trong định nghĩa của tuyến đường của tôi không đúng cách. Giải quyết được sử dụng để giải quyết các dịch vụ cho bộ điều khiển và đây không phải là mục tiêu của tôi. –

+0

Vâng, tôi cũng không làm thế. Nhưng nó vẫn là một khả năng;) –

+2

@Tonkar giải quyết có thể được sử dụng cho nhiều thứ –

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