Vấn đề tôi gặp phải có thể là tiếp tuyến, nhưng vì việc googling đưa tôi đến câu hỏi này, điều này có thể phù hợp. Vấn đề gây ra cho tôi cái đầu xấu xí khi sử dụng Bộ định tuyến UI, nhưng chỉ khi tôi cố gắng làm mới trang bằng nút làm mới trình duyệt. Ứng dụng sử dụng Bộ định tuyến giao diện người dùng với trạng thái trừu tượng cha mẹ và sau đó con loại bỏ cha mẹ. Trên run()
chức năng ứng dụng , có một $state.go('...child-state...')
lệnh. Trạng thái cha mẹ sử dụng mộtresolve
, và lúc đầu tôi nghĩ có lẽ một trình điều khiển con đang thực thi hai lần.
Mọi thứ đều ổn trước khi URL được thêm vào hàm băm.
www.someoldwebaddress.org
Sau đó, khi url đã được sửa đổi bởi UI Router,
www.someoldwebaddress.org#/childstate
... Và sau đó khi tôi làm mới trang bằng nút làm mới trình duyệt , sẽ $stateChangeStart
kích hoạt hai lần và mỗi lần chỉ vào childstate
.
Các resolve
về tình trạng cha mẹ là những gì đang bắn hai lần.
Có lẽ đây là một loại bùn; bất kể, điều này dường như loại bỏ vấn đề đối với tôi: trong khu vực mã $stateProvider
được gọi lần đầu tiên , trước tiên hãy kiểm tra xem window.location.hash có phải là một chuỗi rỗng không. Nếu có, tất cả đều tốt; nếu không, thì đặt window.location.hash thành một chuỗi rỗng. Sau đó, có vẻ như $state
chỉ cố gắng đi đâu đó một lần chứ không phải hai lần.
Ngoài ra, nếu bạn không muốn dựa vào mặc định của ứng dụng run
và state.go(...)
, bạn có thể thử chụp giá trị băm và sử dụng giá trị băm để xác định trạng thái con bạn đang ở ngay trước khi làm mới trang và thêm một điều kiện vào khu vực trong mã nơi bạn đặt state.go(...)
.
ng-app
và với bootstrap thủ công). Đồng thời kiểm tra xem bạn đã gắn bộ điều khiển của mình vào nhiều thành phần chưa (với ng-controller).