2013-02-15 30 views
16

Tôi có một phạm vi như $scope.doc_details trong điều khiển angularjs của tôi, và tôi muốn sử dụng nó để hiển thị một file pdf bằng cách sử dụng một thẻ, như thế này:angularjs biểu trong html <object> thẻ

<object data="{{doc_details.file_url}}" type="application/pdf"></object> 

nhưng nó doesn' t có được nạp trong trình duyệt, trong giao diện điều khiển chrome của tôi, tất cả tôi thấy là:

Failed to load resource: the server responded with a status of 404 (Not Found) 
http://localhost/%7B%7Bdoc_details.file_url%7D%7D 

và khi tôi chỉ hiển thị nó bằng cách sử <span>{{doc_details.file_url}}</span> nó hiển thị các giá trị.

+1

Tôi đặt cược đối tượng đang đánh giá chuỗi trước khi góc có cơ hội thay thế bằng dữ liệu cuối cùng. –

+0

bất kỳ giải pháp nào cho việc này? –

Trả lời

20

Vấn đề ở đây là trình duyệt được nhìn thấy

<object data="{{doc_details.file_url}}" type="application/pdf"></object> 

trong DOM trước góc biên dịch nó, và rõ ràng là {{doc_details.file_url}} không phải là một URL hợp lệ.

Chỉ thị có thể là bạn của bạn ở đây.

Giả sử chúng ta muốn viết:

<pdf src='doc_details.file_url'></pdf> 

Chúng ta có thể tạo ra một chỉ thị rất đơn giản:

app.directive('pdf', function() { 
    return { 
     restrict: 'E', 
     link: function(scope, element, attrs) { 
      var url = scope.$eval(attrs.src); 
      element.replaceWith('<object type="application/pdf" data="' + url + '"></object>'); 
     } 
    }; 
}); 

này sẽ trì hoãn việc tạo ra các yếu tố object cho đến khi chúng tôi thực sự có URL có sẵn cho chúng tôi từ phạm vi (giả sử nó đã có sẵn - nếu không bạn muốn $watch thuộc tính src trên phạm vi cho đến khi nó có sẵn).

Here this is in a fiddle.

+0

Vì vậy, đó là lý do tại sao nó không hoạt động, Cảm ơn bạn rất nhiều –

31

Tính đến AngularJS 1.1.4, bạn có thể sử dụng tiền tố ng-attr- cho thuộc tính data:

<object ng-attr-data="{{doc_details.file_url}}" type="application/pdf"></object> 

Xem ngAttr để liên kết với các thuộc tính tùy ý phần trên AngularJS: Interpolation and data-binding.

+3

Điều này sẽ không hoạt động với IE. IE sẽ không cho phép bạn thay đổi thuộc tính dữ liệu sau khi nó đã được tải. Bạn có thể sẽ nhận được một hộp thông báo cho biết rằng quyền truy cập bị từ chối. Bạn nên tải nó thông qua một chỉ thị thay vì trì hoãn sự ràng buộc. – user2339814

+0

là vẫn còn trường hợp bây giờ? Tôi không thể dường như dễ dàng google "đối tượng phần tử html angularjs" tôi nhận được một loạt các kết quả về việc truyền các đối tượng phần mềm và không phải các đối tượng phần tử html. Tôi nhận được các vấn đề lạ với mã của tôi. Mọi câu trả lời cập nhật cho tài liệu này hoặc liên kết tới tài liệu sẽ giúp cảm ơn :) –

+0

Đây vẫn là trường hợp với IE 11. – Toddsden

-3

Trước tiên, bạn cần phải kiểm tra xem phản hồi có phải là bộ lọc mảng hay không, nếu có, chuyển đổi thành cơ số 64. Ngoài ra, bạn có thể sử dụng thuộc tính thiết lập để gán.

enter image description here

+0

Tốt hơn là chụp ảnh màn hình. Để chụp ảnh màn hình trên Windows, hãy bấm phím Print Screen và sau đó dán nó vào một chương trình chỉnh sửa hình ảnh như Paint bằng cách nhấn CTRL + V. –

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