2013-03-15 28 views
19

Tôi đang cố gắng áp dụng các thuộc tính ng-style trên một thẻ chỉ tùy chỉnh, loại giống như vậy:Tại sao kiểu ng không hoạt động trên cùng một phần tử như một chỉ thị tùy chỉnh?

<my-directive ng-style="myStyle"></my-directive> 

Bên trong bộ điều khiển tôi có:

$scope.myStyle = { 
    "background": "red" 
} 

này dường như không làm việc mặc dù. Khi tôi kiểm tra HTML 'MyStyle' không được hiển thị. Khi tôi áp dụng cùng một thẻ kiểu ng trên một div thông thường, nó sẽ hiển thị đúng.

Tại sao kiểu ng không hoạt động trên thẻ chỉ thị tùy chỉnh?

+0

dường như có tệp [ở đây] (http://jsfiddle.net/arunpjohny/Z56yH/2/) –

Trả lời

32

Chỉ thị của bạn có khả năng xác định phạm vi cách ly: scope: { ... }. Trong trường hợp đó, tất cả các chỉ thị được xác định trên phần tử đó sẽ sử dụng phạm vi cô lập. Do đó, kiểu ng sẽ tìm kiếm thuộc tính myStyle trên phạm vi cô lập, không tồn tại.

enter image description here

Ở trên, dòng màu xám hiển thị $ cha mẹ, đứt nét hiển thị thừa kế nguyên chủng. Phạm vi 004 là phạm vi cô lập của bạn. Phạm vi 003 là phạm vi điều khiển của bạn. ng-phong cách sẽ tìm kiếm myStyle trong phạm vi 004, không tìm thấy nó, sau đó nó sẽ thực hiện theo các đường đứt nét và tìm nó trong Phạm vi, và không tìm thấy nó ở đó.

Thông thường bạn không muốn sử dụng các chỉ thị tạo ra một phạm vi cô lập cùng với các chỉ thị khác trên cùng một phần tử. Bạn có một vài tùy chọn:

  1. sử dụng scope: true thay vì phạm vi cô lập trong chỉ thị của bạn. Sau đó, khi ng-style tìm kiếm myStyle trong phạm vi 004 và không tìm thấy, nó sẽ theo sau đường đứt nét (trong hình bên dưới) và tìm nó trong phạm vi gốc:
    enter image description here
  2. sử dụng ng-style="$parent.myStyle" trong HTML của bạn truy cập thuộc tính myStyle trong phạm vi gốc (ví dụ: theo dòng màu xám trong hình ảnh đầu tiên).
+1

Câu trả lời toàn diện là gì. Rất đẹp! –

+1

Đánh dấu, nếu bạn không chuẩn bị một cuốn sách về Góc, hơn bạn nên. – Stewie

+1

Linh cảm của bạn chính xác là vấn đề tôi đang gặp phải. Cảm ơn câu trả lời chi tiết như vậy. Bây giờ tôi chỉ cần tìm ra giải pháp nào là tốt nhất cho tôi. Chỉ thị của tôi đại diện cho một 'widget' có thể sử dụng lại được và sự hiểu biết của tôi là thực hành tốt cho những chỉ thị đó có phạm vi biệt lập. Tôi cũng đang xem xét gói chỉ thị của tôi trong một div và áp dụng kiểu ng cho div này. – sthomps

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