Tôi có một chỉ thị với phạm vi cô lập (để tôi có thể sử dụng lại chỉ thị ở những nơi khác) và khi tôi sử dụng chỉ thị này với một ng-repeat
, nó không hoạt động.
Tôi đã đọc tất cả tài liệu và câu trả lời về Stack Overflow về chủ đề này và hiểu các vấn đề. Tôi tin rằng tôi đã tránh được tất cả các lỗi thông thường.
Vì vậy, tôi hiểu rằng mã của tôi không thành công do phạm vi được tạo bởi ng-repeat
chỉ thị. Chỉ thị của riêng tôi tạo một phạm vi cô lập và thực hiện liên kết dữ liệu hai chiều với một đối tượng trong phạm vi chính. Chỉ thị của tôi sẽ gán một đối tượng-giá trị mới cho biến bị ràng buộc này và điều này hoạt động hoàn hảo khi chỉ thị của tôi được sử dụng mà không có ng-repeat
(biến cha được cập nhật chính xác). Tuy nhiên, với ng-repeat
, phép gán tạo ra một biến mới trong ng-repeat
phạm vi và biến cha không thấy sự thay đổi. Tất cả điều này là như mong đợi dựa trên những gì tôi đã đọc.
Tôi cũng đã đọc rằng khi có nhiều chỉ thị trên một phần tử nhất định, chỉ một phạm vi được tạo. Và a priority
có thể được đặt trong mỗi chỉ thị để xác định thứ tự áp dụng các chỉ thị; các chỉ thị được sắp xếp theo mức độ ưu tiên và sau đó các hàm biên dịch của chúng được gọi (tìm kiếm từ ưu tiên tại http://docs.angularjs.org/guide/directive ).
Vì vậy, tôi hy vọng mình có thể sử dụng mức độ ưu tiên để đảm bảo rằng chỉ thị của tôi chạy trước và kết thúc việc tạo phạm vi cô lập và khi ng-repeat
chạy, nó sử dụng lại phạm vi cô lập thay vì tạo phạm vi kế thừa nguyên mẫu từ phạm vi mẹ. Các ng-repeat
tiểu bang tài liệu mà chạy chỉ ở mức ưu tiên 1000
. Không rõ 1
là mức ưu tiên cao hơn hay mức ưu tiên thấp hơn. Khi tôi sử dụng mức độ ưu tiên 1
trong chỉ thị của mình, nó không tạo ra sự khác biệt, vì vậy tôi đã thử 2000
. Nhưng điều đó làm cho mọi thứ trở nên tồi tệ hơn: ràng buộc hai chiều undefined
của tôi trở nên và chỉ thị của tôi không hiển thị bất cứ điều gì.
Tôi đã tạo một trò chơi để hiển thị sự cố của mình . Tôi đã nhận xét về priority
cài đặt trong chỉ thị của tôi. Tôi có một danh sách các đối tượng tên và một lệnh được gọi name-row
để hiển thị các trường họ và tên trong đối tượng tên. Khi một tên hiển thị được nhấp vào, tôi muốn nó đặt một selected
biến trong phạm vi chính. Mảng tên, selected
biến được chuyển tới name-row
chỉ thị bằng cách sử dụng liên kết dữ liệu hai chiều.
Tôi biết cách làm cho điều này hoạt động bằng cách gọi các hàm trong phạm vi chính. Tôi cũng biết rằng nếu selected
ở bên trong một đối tượng khác, và tôi liên kết với đối tượng bên ngoài, mọi thứ sẽ hoạt động. Nhưng tôi không quan tâm đến các giải pháp đó vào lúc này.
Thay vào đó, những câu hỏi tôi có là:
- Làm cách nào để ngăn
ng-repeat
việc tạo một phạm vi kế thừa nguyên mẫu từ phạm vi chính và thay vào đó, nó sử dụng phạm vi cô lập của chỉ thị của tôi? - Tại sao mức độ ưu tiên
2000
trong chỉ thị của tôi không hoạt động? - Sử dụng Batarang, có thể biết loại phạm vi đang sử dụng không?
ng-repeat
. Tôi nghĩ có thể kết hợp các chỉ thị độc lập với ng-repeat
. Để được tiếp tục ...
ng-repeat
không nên có phạm vi. ng-repeat
có một phạm vi có ý nghĩa đối với trường hợp sử dụng điển hình, vì vậy tôi không đề nghị nó được thay đổi. Thay vào đó, giống như tôi đã nhận xét trong câu trả lời của Alex Osborn, tôi nghĩ rằng tôi sẽ tạo một chỉ thị lặp lại dựa trên ng-repeat
điều đó không tạo ra phạm vi riêng của nó. Điều này sau đó có thể được sử dụng cho các chỉ thị lặp lại có phạm vi cô lập riêng của chúng. Để được tiếp tục ...
ng-repeat
hay chỉ thị lặp lại tùy chỉnh ít phạm vi hơn. Tôi nghĩ rằng "người gọi" biết điều này thì không sao, nhưng không ổn nếu "người gọi" (lệnh được lặp lại) để biết liệu nó có được lặp lại hay không. Để được tiếp tục ...
scope: true
cho chỉ thị của mình. Xem thêm (nếu bạn chưa có) stackoverflow.com/questions/14914213/… Ngoài ra, chỉ vì một chỉ thị sẽ được sử dụng ở nhiều nơi không có nghĩa là chúng ta nên tự động sử dụng một phạm vi cô lập.