Angular lười biếng ràng buộc một lần cho các biểu thức


93

AngularJS có một tính năng mới kể từ phiên bản 1.3.0-beta.10: "liên kết lười biếng một lần" .

Các biểu thức đơn giản có thể được bắt đầu bằng ::, cho biết góc dừng xem sau khi biểu thức được đánh giá lần đầu tiên. Ví dụ phổ biến được đưa ra là:

<div>{{::user.name}}</div>

Có cú pháp tương tự cho các biểu thức như sau không?

<div ng-if="user.isSomething && user.isSomethingElse"></div>
<div ng-class="{classNameFoo: user.isSomething}"></div>

Tham khảo tài liệu góc cho một lời giải thích chi tiết: docs.angularjs.org/guide/expression#one-time-binding
Akshay Gundewar

Câu trả lời:


160

Đúng. Bạn có thể đặt tiền tố cho mọi biểu thức bằng ::, ngay cả những biểu thức trong ngIfhoặc ngClass:

<div ng-if="::(user.isSomething && user.isSomethingElse)"></div>
<div ng-class="::{classNameFoo: user.isSomething}"></div>

Trên thực tế, chỉ đơn giản là kiểm tra xem hai ký tự đầu tiên trong biểu thức có phải là :để kích hoạt liên kết một lần hay không (và sau đó loại bỏ chúng, do đó dấu ngoặc đơn thậm chí không cần thiết). Mọi thứ khác vẫn giữ nguyên.


3
Nó trả lời câu hỏi của tôi, mặc dù một số tính năng mới không hoạt động tốt: <div ng-if="::user.isSomething"></div><div ng-if="::(!user.isSomething)"></div>cả hai đều hiển thị. Nó hoạt động mà không có "::".
hiếm có

@seldary Tôi không thể tái tạo sự cố. Mọi biểu thức có tiền tố là ::hoạt động tốt đối với tôi, như đã giải thích trong bản chỉnh sửa của tôi. Bạn có thể làm một trò chơi, nếu nghi ngờ?
Blackhole,

7
Lúc đầu, nó dường như không hoạt động đối với tôi, với ngClass có nhiều lớp được xác định. Tôi nhanh chóng phát hiện ra rằng ràng buộc vẫn bị ràng buộc vì một số biến được xem được sử dụng trong ngClass chưa được xác định (và chúng tôi biết rằng góc sẽ đợi giá trị được xác định trước trước khi phát hành trình theo dõi). Đây là một thủ thuật nhỏ để chứng minh hành vi này jsfiddle.net/2LkyLoop .
Denis Pshenov

1
Cú pháp liên kết @MaxRocket đã được thêm vào góc 1.3. Vì vậy, nó sẽ không làm việc trong 1.2 hoặc thấp hơn
Berty

2
Ràng buộc một lần của ng-if dường như không hoạt động. Số lượng người theo dõi rất cao khi có hoặc không có ::. Nó hoạt động tốt cho ng-class, nhưng ng-if dường như không tuân theo ràng buộc một lần đối với tôi (1.5.6). Lưu ý rằng tôi đang cố gắng liên kết một chiều một thuộc tính đối tượng đến từ ng-repeat. Không chắc liệu điều đó có tạo ra sự khác biệt hay không.
AgmLauncher
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.