17

Tôi muốn sử dụng tùy chọn 'controllerAs' trong các chỉ thị của mình. Hãy để tôi trích dẫn lý do từ "An AngularJS Style Guide for Closure Users at Google":"controller as" vs isolate scope

Tại sao? Đặt các phương thức và thuộc tính trực tiếp vào bộ điều khiển, thay vì xây dựng một đối tượng phạm vi, phù hợp hơn với phong cách lớp đóng cửa của Google . Ngoài ra, sử dụng 'bộ điều khiển dưới dạng' làm cho nó hiển thị bộ điều khiển nào bạn đang truy cập khi nhiều bộ điều khiển áp dụng cho một phần tử. Vì luôn có dấu '.' trong các ràng buộc, bạn không phải lo lắng về nguyên mẫu mặt nạ thừa kế prototypal.

Nhưng tôi có thể thấy vấn đề khi sử dụng cách tiếp cận này nếu chỉ thị đã tách biệt ràng buộc phạm vi.

angular.module('cmw').directive('fooWidget', function() { 
    return { 
     controller: function() { 
      this.qux = '123'; 
     }, 
     controllerAs: 'fooWidget', 
     scope: { 
      bar: '=' 
     }, 
     template: ' {{fooWidget.qux}} {{bar}} ' 
    }; 
}); 

Trong trường hợp này, tài sản bar được gắn vào phạm vi, không để bộ điều khiển, mà kết quả trong một tình huống mâu thuẫn khó hiểu nơi các thuộc tính khác nhau nên được xem xét tại nhiều nơi khác nhau. Cách được đề xuất 'chính thức' để giải quyết vấn đề này là gì?

CẬP NHẬT: xem GitHub issue về việc này.

Trả lời

8

Điều này đã được giải quyết trong Góc 1.3 bằng cách thêm thuộc tính bindToController vào số directive API.

2

Thật khó để tìm một mẫu "chính thức" để thực hiện việc này. Cá nhân, tôi nghĩ rằng nó phụ thuộc vào mục tiêu của bạn là gì.

Nếu bạn muốn hiển thị thông tin từ Chỉ thị cho thế giới bên ngoài, hãy sử dụng Phạm vi biệt lập vì đó là một trong những lý do tại đó. 'API' đó không phải được định nghĩa hoàn toàn trong Chỉ thị, nó có thể được định nghĩa trong Dịch vụ AngularJS mà bạn đưa vào Chỉ thị và hiển thị qua Phạm vi bị cô lập theo cách bạn có Chỉ thị liên quan chủ yếu với Giao diện người dùng cùng với một dịch vụ xử lý bất kỳ logic nghiệp vụ nào.

Nếu bạn đang liên lạc giữa các Chỉ thị, đó là nơi ưu tiên Bộ điều khiển.

Nhưng để thử và nhận được một số thông tin chính thức hơn, đây là thông tin từ website AngularJS về việc sử dụng bộ điều khiển với Chỉ thị:

Thực hành tốt nhất: bộ điều khiển sử dụng khi bạn muốn để lộ một API để chỉ thị khác . Nếu không, hãy sử dụng liên kết.

Cá nhân tôi chưa bao giờ thấy Bộ điều khiển được sử dụng trong Chỉ thị ngoại trừ giao tiếp Chỉ thị đến Chỉ thị. Tôi không nói rằng bạn không thể sử dụng chúng, tôi đã không nhìn thấy nó. Ngoài ra, nếu bạn muốn để lộ logic điều khiển với thế giới bên ngoài, thì bạn sẽ phải liên kết với các phạm vi cô lập anyways để tất cả thực sự phụ thuộc vào những gì bạn muốn làm.

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