5

Tôi có chỉ thị tùy chỉnh myDirective thực hiện tác vụ trên một phần tử.Chỉ thị AngularJS trong ng-if sẽ không chạy

Tôi có chỉ thị này trong một khối ng-if

<div ng-if="condition"> 
    <div my-directive></div> 
</div> 

Something như fiddle này: http://jsfiddle.net/hGnvv/ chỉ với điều kiện ng-if quay sang đúng sau $http yêu cầu của tôi được nạp.

Chỉ thị có thể được biên dịch trong thời gian chạy, nhưng không bao giờ được liên kết, vì vậy mã không bao giờ chạy. Nếu tôi thay thế ng-if bằng ng-show chỉ thị hoạt động tốt.

Bất kỳ giải pháp nào?

Chỉnh sửa: Tôi không thể sử dụng ng-show vì tôi có 130 chỉ thị trong biểu mẫu. 20 chỉ thị vẫn chạy, và lệnh khác chạy theo kiểu đối tượng của tôi.

  • ng-if="type == 1" sau đó tải các yếu tố này
  • ng-if="type == 2" sau đó tải các yếu tố khác vv

Nếu tôi thay đổi ng-if-ng-show, hình thức mất 8s để tải thay vì 1s.

+4

Bạn đã có một giải pháp.Thay thế ng-if bằng ng-show – nikhil

+0

Tôi không thể làm điều đó, tôi có 130 chỉ thị trên một biểu mẫu duy nhất. Nếu tôi thay thế ng-if bằng ng-show, tất cả các mã này phải chạy biến dạng chậm hơn nhiều (8s thay vì ~ 1s). –

+2

Sử dụng ng-show nếu có thể. Ng-nếu loại bỏ phần tử khỏi DOM, do đó không có cách nào để biên dịch nó. –

Trả lời

2

Vấn đề không phải là chỉ thị không chạy, nhưng chức năng $watch mà tôi đã có bên trong nó không chạy chút nào. Tôi không hiểu được lý do chính xác của vấn đề này, bởi vì cùng một chỉ thị hoạt động tốt bên ngoài ng-if.

Dù sao đã thay đổi $watch thành ->$watchCollection và nó hoạt động tốt ngay bây giờ, vì nó thấy tất cả các bản cập nhật cho các đối tượng mà tôi đang xem.

2

Điều kiện ng-if ban đầu là sai, do đó phần tử không tồn tại trong DOM và chỉ thị không được liên kết.

Khi ng-nếu tình trạng sau này trở thành true, liên kết callback nên bắn một cách chính xác, như đã thấy trong các ví dụ:

Thiết ng-if true khi button được click: http://jsfiddle.net/q05gret0/

Thiết ng-if true sau Yêu cầu $http được tải: http://jsfiddle.net/fhu8ky62/1/

Nếu bạn không nhận được hành vi này, sự cố có thể là do phạm vi được kế thừa; kiểm tra ng-if đang theo dõi cùng một biến phạm vi mà yêu cầu của bạn đang cập nhật. This article có một vài điểm về bóng tối biến phụ huynh/con và các giới hạn khác.

+0

Tôi muốn chạy mã khi điều kiện ng-if trở thành sự thật. Vấn đề là khi nó trở thành sự thật, liên kết của chỉ thị không chạy. –

+0

Ah Tôi hiểu bây giờ, sẽ chỉnh sửa câu trả lời của tôi – seanhodges

+0

Cảm ơn sự giúp đỡ, đây không phải là vấn đề. Tôi đã tìm được nó, đăng nó trong một câu trả lời khác bên dưới. –

0

ví dụ nếu mô hình của bạn cũng giống như $scope.item = true và bạn sử dụng nó như ng-if="item" bạn nên thay đổi mô hình của bạn để $scope.myvalue = {} và sử dụng như thế này: ng-if="myvalue.item", tại tất cả những gì có nghĩa là bạn nên sử dụng đối tượng sở hữu cho ng-if không phải là một giá trị đơn giản

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