Làm thế nào để tải hình ảnh (và các nội dung khác) trong Angular một dự án?


106

Tôi khá mới với Angular nên tôi không chắc cách thực hành tốt nhất để làm điều này.

Tôi đã sử dụng angle-cli và ng new some-projectđể tạo một ứng dụng mới.

Trong đó đã tạo một thư mục "hình ảnh" trong thư mục "tài sản", vì vậy bây giờ thư mục hình ảnh của tôi là src/assets/images

Trong app.component.html(là thư mục gốc của ứng dụng của tôi), tôi đặt

<img class="img-responsive" src="assets/images/myimage.png">

Khi tôi ng servexem ứng dụng web của mình, hình ảnh không hiển thị.

Cách tốt nhất để tải hình ảnh trong ứng dụng Angular là gì?

CHỈNH SỬA: Xem câu trả lời bên dưới. Tên hình ảnh thực tế của tôi đã sử dụng dấu cách, mà Angular không thích. Khi tôi loại bỏ khoảng trắng trong tên tệp, hình ảnh hiển thị chính xác.


1
có bạn là đúng, bạn đã cho cú pháp đường dẫn chính xác từ tài sản fodler, có thể là vấn đề với tên không phù hợp của bạn, kiểm tra xem hình ảnh hiện diện hay không
Pardeep Jain

1
Chắc chắn không phải là một tên không phù hợp, tôi đã kết thúc việc tạo ra một publicbên ngoài thư mục srcvà hiển thị hình ảnh với<img class="img-responsive" src="../../public/images/myimage.png">
user3183717

Đã sửa nó. Tên tệp hình ảnh thực tế của tôi có khoảng trắng trong đó, và vì lý do gì mà Angular không thích điều đó. Khi tôi xóa khoảng trắng khỏi tên tệp của mình, assets/images/myimage.pngđã hoạt động.
dùng3183717

1
tốt :) btw không cần phải tạo thêm thư mục chung trong Cập nhật cli họ đã có cùng tên asstes.
Pardeep Jain

Tôi gặp sự cố tương tự với các tệp có phần mở rộng khác (ví dụ .sgf:) Tôi muốn lưu trữ các tệp đó và liên kết đến chúng từ ứng dụng, nhưng dường như chỉ cần đặt chúng vào assetsthư mục là không đủ. Bất kỳ ý tưởng?
bvdb

Câu trả lời:


72

Tôi sửa nó rồi. Tên tệp hình ảnh thực tế của tôi có khoảng trắng trong đó, và vì lý do gì mà Angular không thích điều đó. Khi tôi xóa khoảng trắng khỏi tên tệp của mình, assets/images/myimage.pngđã hoạt động.


62

Trong dự án của tôi, tôi đang sử dụng cú pháp sau trong app.component.html của tôi:

<img src="/assets/img/1.jpg" alt="image">

hoặc là

<img src='http://mruanova.com/img/1.jpg' alt='image'>

sử dụng [src] làm biểu thức mẫu khi bạn đang ràng buộc một thuộc tính bằng phép nội suy:

<img [src]="imagePath" />

giống như:

<img src={{imagePath}} />

Nguồn: làm thế nào để ràng buộc img src trong angle 2 trong ngFor?


1
thư mục app.component.html và nội dung của bạn có ở cùng một cấp không?
Halil

Không, cấu trúc thư mục được tạo tự động và bạn phải có cùng các thư mục với tôi: dự án-thư mục \ src \ assests \ và dự án-thư mục \ app \ app.component.html nếu điều này có ích, vui lòng ủng hộ.
mruanova

26

Angular-cli bao gồm thư mục nội dung trong các tùy chọn xây dựng theo mặc định. Tôi gặp sự cố này khi tên hình ảnh của tôi có dấu cách hoặc dấu gạch ngang. Ví dụ :

  • 'my-image-name.png' phải là 'myImageName.png'
  • 'my image name.png' phải là 'myImageName.png'

Nếu bạn đặt hình ảnh trong thư mục nội dung / img, thì dòng mã này sẽ hoạt động trong các mẫu của bạn:

<img alt="My image name" src="./assets/img/myImageName.png">

Nếu sự cố vẫn tiếp diễn, chỉ cần kiểm tra xem tệp cấu hình Angular-cli của bạn và đảm bảo rằng thư mục nội dung của bạn được thêm vào các tùy chọn xây dựng.


1
[alt] không cần thiết đối với chuỗi, [] là liên kết dữ liệu.
chris_r

14

Dành riêng cho Angular2 đến 5, chúng ta có thể ràng buộc đường dẫn hình ảnh bằng cách sử dụng thuộc tính ràng buộc như bên dưới. Đường dẫn hình ảnh được bao bởi dấu ngoặc kép.

Ví dụ mẫu

<img [src]="'assets/img/klogo.png'" alt="image">


Sự khác biệt giữa src = "asset / img / klogo.png" và [src] = "'asset / img / klogo.png'" là gì?
gdbj

@gdbj đây là câu trả lời stackoverflow.com/questions/41426974/…
mohit uprim

vì vậy về cơ bản, chúng ta sử dụng [src] để liên kết với mô hình nếu chúng ta muốn có thể thay đổi src bằng phương thức đó.
gdbj

Cảm ơn mohit đã trả lời chủ đề. @gdbj Tôi hy vọng bây giờ bạn đã giải quyết được những nhầm lẫn của mình.
Bhuwan Maharjan

Chỉ muốn chỉ ra cho những độc giả tương lai tìm kiếm những câu trích dẫn bên trong trong bình luận đầu tiên của gdbj tại đây. Chúng khó thấy trong phông chữ nhận xét hơn chúng trong câu trả lời ở trên, nhưng nếu thiếu chúng có thể dẫn đến một số nhầm lẫn. (Có thể tùy thuộc vào trình duyệt của bạn, không chắc chắn.)
SilithCrowe

7

Thông thường "ứng dụng" là gốc ứng dụng của bạn - bạn đã thử app/path/to/assets/img.pngchưa?


angle-cli đặt appassetscác thư mục riêng biệt trong srcthư mục. (xin lỗi, tôi không chắc mình phải định dạng cấu trúc và tên thư mục như thế nào)
user3183717

5

1. Thêm dòng này ở trên cùng trong thành phần.

declare var require: any

2. thêm dòng này trong lớp thành phần của bạn.

imgname= require("../images/imgname.png");
  1. thêm 'imgname' này trong thẻ img src trên trang html.

    <img src={{imgname}} alt="">


điều này tốt hơn cho cây phân cấp tệp không phẳng.
chris_r

-1

đối với tôi "Tôi" là vốn trong "Hình ảnh". mà cũng có góc-cli không thích. vì vậy nó cũng phân biệt chữ hoa chữ thường.


-1

Nó luôn phụ thuộc vào đâu là tệp html của bạn tham chiếu đến đường dẫn của tài nguyên tĩnh (trong trường hợp này là hình ảnh).

Ví dụ A:

src
|__assests
   |__images
      |__myimage.png
|__yourmodule
   |__yourpage.html

Như bạn có thể thấy, yourpage.html cách thư mục gốc (thư mục src) một thư mục, vì lý do này, nó cần một lượng ../ để quay lại thư mục gốc sau đó bạn có thể đi đến hình ảnh từ thư mục gốc:

<img class="img-responsive" src="../assests/images/myimage.png">

Ví dụ B:

src
|__assests
   |__images
      |__myimage.png
|__yourmodule
   |__yoursubmodule
      |__yourpage.html

Ở đây bạn phải đi u trong cây bằng 2 thư mục:

<img class="img-responsive" src="../../assests/images/myimage.png">
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.