2013-01-21 37 views
6

Tôi đang cố gắng tạo trang bằng tab (sử dụng AngularJS). Có một bản đồ (API Google Maps v3) ở một trong các tab đó. Khi bản đồ nằm trong tab ở phía trước, mọi thứ có vẻ ổn. Nhưng khi bản đồ được tải trong tab nền và chỉ hiển thị sau khi tab được nhấp vào bản đồ bị thất lạc/cắt bỏ và khi bạn cố gắng thao tác với nó, chức năng của nó dường như bị hỏng.AngularJS: ánh xạ qua API Google Maps v3 trong tab

Tôi đã tìm kiếm các giải pháp và tôi thấy những thủ đoạn với

google.maps.event.trigger(map, 'resize'); 
map.setCenter(center); 

nhưng nó không làm việc. Bạn có thể xem http://jsfiddle.net/n4q7Y/5/ và cho tôi biết những gì tôi đã bỏ lỡ không?

Cảm ơn bạn.

Trả lời

7

Chờ một khoảnh khắc trước khi bạn kích hoạt các resize -event: http://jsfiddle.net/doktormolle/aAeZw/

+0

Nice, cảm ơn bạn :-) fiddle này được cập nhật với ý tưởng của bạn cũng nạp điểm đánh dấu: http://jsfiddle.net/honzzz/n4q7Y/22/ – honzzz

+0

Tiến sĩ .Molle, bất kỳ ý tưởng tại sao điều này là cần thiết? Có vẻ như một hack chỉ để bỏ qua một lỗ hổng với các mô-đun Maps mà kết quả trong hai '$ phạm vi. $ Apply's xảy ra cùng một lúc ... Mà nên do đó được cố định trong mô-đun hơn là với một thời gian chờ .. –

+1

I đoán vấn đề là một thực tế rằng những thay đổi trên tài sản được lựa chọn được quan sát bởi 2 bên (1. buộc bởi '$ phạm vi. $ watch' và 2. bởi' ng-show'), nhưng không có cách nào để kiểm soát thứ tự của cuộc gọi của người nghe, bởi vì họ được gọi là không đồng bộ. Một giải pháp tốt hơn có thể là đặt thuộc tính khác cho biết rằng bản đồ sẽ được hiển thị và xem thuộc tính này để kích hoạt sự kiện thay đổi kích thước cho bản đồ: http://jsfiddle.net/doktormolle/6WxtE/ –

3

cảm ơn bạn Dr.Molle, nếu tôi có thể cải thiện nó một chút, trong trường hợp của tôi một $ timeout không chậm trễ thực hiện công việc một cách hoàn hảo (vì nó sẽ chờ cho đến khi kết thúc $ tiêu hóa chu kỳ)

$timeout(function() { 
    // in my case 
    initializeMap(); 
    // OR this case: 
    google.maps.event.trigger(map, 'resize');      
}, 1000); // with or without delay 
+0

Hey @Zeev G, không phải là nó hoạt động mà không có sự chậm trễ? $ timeout không chậm trễ là một thủ thuật để chờ góc đã sẵn sàng.(Nhưng có thể Google Map được tải không đồng bộ để nó có thể chậm hơn góc) –

+0

là mã của tôi nó không hoạt động nếu không có 1000 triệu –

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