2013-06-18 31 views
22

Tôi muốn thiết lập lời hứa và sau đó ném nó vào chỉ thị (sử dụng kiểu thuộc tính '=' thuộc tính) và thực hiện phép thuật then trong chỉ thị, nhưng lời hứa như một thuộc tính dường như dẫn đến lời hứa được giải quyết là undefined, do đó, then (và bất kỳ chức năng lời hứa nào khác) không khả dụng.Làm cách nào để chuyển lời hứa dưới dạng thuộc tính chỉ thị trong Angular

Trả lời

15

tôi nghi ngờ điều này là do tinh chỉnh cụ thể này:

$ q lời hứa được công nhận bởi các công cụ khuôn mẫu trong góc, có nghĩa là trong các mẫu bạn có thể đối xử với những lời hứa gắn liền với một phạm vi như thể họ là những người kết quả giá trị - angular $q docs

và điều này về cơ bản dẫn đến sự hứa hẹn đang được chuyển đổi bên trong mẫu với giá trị $$v rằng lời hứa sử dụng để lưu trữ các giá trị kết quả, và ở giai đoạn liên kết này là khả năng vẫn không xác định - giá trị được chuyển đổi (tức là không xác định), không phải chính lời hứa sau đó được chuyển vào chỉ thị.

Cách giải quyết không được sử dụng chính lời hứa khi thuộc tính được chuyển vào chỉ thị, nhưng để làm cho nó trở thành một phần của đối tượng mẹ: đối tượng mẹ sẽ không chạy $ q/template engine, và vì vậy bạn ' sẽ có thể đi sâu vào lời hứa từ phụ huynh và truy cập chức năng then từ đó.

Xem http://jsfiddle.net/cebjyre/95sjT/ cho một ví dụ - uncommenting dòng 32 sẽ gây ra một sự thất bại do lời hứa cấp cao nhất không còn thực sự là một lời hứa tại thời điểm đó, trong khi lời hứa mức thứ hai trên dòng 17 tác phẩm mỹ

+1

Cảm ơn. Điều này nên được chọn là câu trả lời đúng – manikanta

+0

Cảm ơn câu trả lời hữu ích đó. Đó là một mụn cóc khá khó chịu trên Angular mặc dù - nó xử lý ràng buộc để hứa hẹn minh bạch trực tiếp trong xem, nhưng không phải trong các mẫu. Vì vậy, ngay cả khi bạn muốn truyền dữ liệu thẳng, bạn phải bọc nó trong một lời hứa và một đối tượng bao bọc. Và bây giờ mẫu chỉ thị của tôi có đầy đủ tính xấu như '{{itemList.promise [index]}}'. Chỉ thị không phải là liền mạch như tôi muốn. –

+6

từ lời hứa 1,2 góc cạnh không còn được công nhận bởi động cơ templating –

6

Cảm ơn. Tôi đã thêm tài liệu này vào tài liệu Góc.

http://docs.angularjs.org/api/#comment-984109158

Để đạt được điều này quấn lời hứa của mình trong các phụ huynh: $ scope.myDirectiveAtrribute = {lời hứa: deferred.promise} và sau đó trong việc tiếp cận thị lời hứa

$ phạm vi. myDirectiveAtrribute.promise.then (hàm() {});

+1

Cảm ơn bạn đã chia sẻ. Giải pháp của bạn đang hoạt động! – ValeriiVasin

+0

Tôi cũng đã sử dụng chiến lược này bằng cách sử dụng các thành phần Angular 1.5. Tôi đã sử dụng angular.element (document) .ready() và sau đó truy cập lời hứa từ cuộc gọi lại đã sẵn sàng. Có lẽ một trường hợp sử dụng để gắn bó với các chỉ thị thay vì các thành phần nhưng nó hoạt động. – mbokil

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