2012-07-21 30 views
11

Tôi thấy một số hành vi rất kỳ quặc trong ứng dụng AngularJS của mình.

Khi một chương trình phát sóng $ duy nhất được thực hiện, bộ nhận (chỉ) được kích hoạt hai lần.

Hiệu ứng trên toàn bộ ứng dụng giống như khi người nhận chỉ bị sa thải sau khi. (nghĩa là chỉ một mặt hàng được thêm vào giỏ).

Nếu bạn kích hoạt phát sóng $ hai lần (tức là nhấp hai lần vào nút phát sóng $), bạn nhận được bốn lần thực hiện người nhận nhưng số lượng hai mục được thêm chính xác vào giỏ.

Có một số tính toán lại tính toán giống như bảng tính đang diễn ra ở đây không? Các hàm phạm vi $ có cần phải không ảnh hưởng đến các biến javascript 'đơn giản' không?

Vấn đề của tôi là tôi đã thêm alert và nó đang được hiển thị hai lần.


tôi đã thực hiện một số công việc hơn trong gỡ lỗi này:

tôi đã thêm một bộ đếm mà đếm số lần phát sóng đã được nhận.

Nếu phạm vi (không có đô la) là toàn cầu, tôi nhận được kết quả gấp đôi. Nếu phạm vi của nó là cục bộ với hàm Ctlr, tôi nhận được kết quả không tăng gấp đôi.

Tôi có thể tạo bằng cách nào đó hai trường hợp bộ điều khiển của mình không?

Tôi có thể thấy từ firebug rằng $ http ajax yêu cầu được thực hiện từ bộ điều khiển chỉ xảy ra một lần, vì vậy tôi rất bối rối.

+1

Nếu bạn chưa thử nó, hãy kiểm tra phần mở rộng AngularJS Batarang Chrome để khắc phục sự cố (https://github.com/angular/angularjs-batarang) trong trường hợp có phạm vi lồng nhau gây nhầm lẫn. – Gloopy

Trả lời

22

Tôi sẽ bắt đầu bằng cách thêm câu lệnh console.log vào phần thân của bộ điều khiển để xem số lần được khởi tạo. Vòng đời của các bộ điều khiển có thể ngắn vì chúng gắn với các phần tử DOM có thể được tạo và phá hủy thường xuyên.

Nếu bạn đang sử dụng $ routeProvider, bạn có chỉ định giá trị cho thuộc tính "bộ điều khiển" không? Nếu vậy, bạn cũng chỉ định cùng một bộ điều khiển trong một phần bằng cách sử dụng thuộc tính "ng-controller"? Bạn thực sự muốn chọn một hoặc khác, không phải cả hai, nếu không hai trường hợp bộ điều khiển sẽ được tạo ra mỗi khi bạn điều hướng đến tuyến đường đó.

+2

Tôi nghĩ đó là nó - tôi đã chuyển từ 'ng-controller' sang' $ routeProvider' và không nhận ra rằng tôi cần xóa 'ng-controller' khi tôi cắt-n-dán trang thành một phần. Tôi sẽ kiểm tra cuối tuần này, sau đó chấp nhận câu trả lời. – fadedbee

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