Tôi đang cố gắng theo dõi this SO answer explaining how to render a recursive JSON structure using a directive. Tuy nhiên, không giống như câu trả lời được cung cấp, dữ liệu của tôi là không phải được biết khi DOM được tải và Góc chạy lần đầu tiên.Cập nhật chỉ thị JS góc khi Dịch vụ thay đổi
Thay vào đó, dữ liệu của tôi được truy xuất từ trường nhập HTML và được lưu trữ trong Dịch vụ góc (khi người dùng gửi biểu mẫu).
Làm cách nào để giữ Chỉ thị góc được cập nhật khi dữ liệu của Dịch vụ được sửa đổi?
Cập nhật để đáp ứng để trả lời
@musically_ut cung cấp một câu trả lời tuyệt vời đã giúp, nhưng tiết lộ một vấn đề liên quan, ngăn chặn một thực hiện (cập nhật tại đây).
Chỉ thị ám HTML chứa Angular {{expressions}}
truy cập dữ liệu được lưu trữ trong $scope
. Vì giải pháp ban đầu là $watch
khi dịch vụ có sẵn dữ liệu. Làm cách nào tôi có thể đảm bảo dữ liệu 'mới' được thêm vào $scope
trước khi chỉ thị hiển thị?
Tổng quan về kiến trúc và dòng chảy là:
ControllerA
-> Nhận đầu vào từ người dùngControllerA
-> Sử dụng dịch vụ để chuyển đổi dữ liệuControllerB
->$watch
cho những thay đổi trong dịch vụDirective
->$watch
cho cha nges trong dịch vụControllerB
-> Thêm dữ liệu vào$scope
Directive
-> Màn hình chuyển đổi dữ liệu (từ dịch vụ) sử dụng chỉ
Vấn đề là giữa các bước 5 và 6. Chỉ thị hiển thị {{expressions}}
trước khi ControllerB thêm dữ liệu vào $scope
. Ngay cả khi điều này đã làm việc, nó cảm thấy cách quá phức tạp và 'hacky'.
Thực tế, để hồi quy, tôi đang sử dụng $watch
trong ControllerB để nghe khi dữ liệu được chuyển đổi sẵn sàng trong một dịch vụ. Ngay cả điều này cũng cảm thấy một chút quá mức cần thiết (dịch vụ không thực hiện các cuộc gọi không đồng bộ).
Tôi mới trong góc, và nhận được bài viết của bạn bằng cách tìm kiếm thông tin về xem thay đổi dịch vụ trong chỉ thị. Theo như tôi hiểu bạn pb (và theo những gì tôi đọc gần đây), bạn không nên 'thêm dữ liệu vào phạm vi' trong ** ControllerB ** của bạn, tốt hơn bạn nên báo cáo nó cho ** dịch vụ **, và nó sẽ được tự động báo cáo đến phạm vi ** controllerB **. Nhân tiện, bạn sẽ có thể theo dõi ** thay đổi ** dịch vụ trong chỉ thị ** của bạn (tôi có nghĩa là dễ dàng hơn là theo dõi phạm vi ** externalB ** controllerB **.) Nhưng có lẽ tôi đã sai. –