วิธีโหลดรูปภาพ (และทรัพย์สินอื่น ๆ ) ใน Angular an project?


109

ฉันค่อนข้างใหม่กับ Angular ดังนั้นฉันจึงไม่แน่ใจว่าแนวทางปฏิบัติที่ดีที่สุดในการทำเช่นนี้

ฉันใช้ angular-cli และng new some-projectสร้างแอปใหม่

ในนั้นได้สร้างโฟลเดอร์ "images" ในโฟลเดอร์ "assets" ดังนั้นตอนนี้โฟลเดอร์ภาพของฉันคือ src/assets/images

ในapp.component.html(ซึ่งเป็นรากของแอปพลิเคชันของฉัน) ฉันใส่

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

เมื่อฉันng serveจะดูเว็บแอปพลิเคชันของฉันภาพไม่ปรากฏขึ้น

แนวทางปฏิบัติที่ดีที่สุดในการโหลดภาพในแอปพลิเคชัน Angular คืออะไร?

แก้ไข: ดูคำตอบด้านล่าง ชื่อรูปภาพจริงของฉันใช้ช่องว่างซึ่ง Angular ไม่ชอบ เมื่อฉันลบช่องว่างในชื่อไฟล์ภาพจะแสดงอย่างถูกต้อง


1
ใช่คุณพูดถูกคุณให้ไวยากรณ์เส้นทางที่ถูกต้องจากผู้ให้ข้อมูลเกี่ยวกับสินทรัพย์อาจมีปัญหากับชื่อของคุณไม่ตรงกันตรวจสอบว่ามีรูปภาพอยู่หรือไม่
Pardeep Jain

1
ไม่ใช่ชื่อที่ไม่ตรงกันอย่างแน่นอนฉันลงเอยด้วยการสร้างpublicโฟลเดอร์นอกsrcและแสดงภาพด้วย<img class="img-responsive" src="../../public/images/myimage.png">
user3183717

ซ่อมมัน. ชื่อไฟล์ภาพที่แท้จริงของฉันมีช่องว่างอยู่และด้วยเหตุผลใดก็ตามที่ Angular ไม่เป็นเช่นนั้น เมื่อฉันลบช่องว่างออกจากชื่อไฟล์ของฉันใช้assets/images/myimage.pngงานได้
user3183717

1
ดี :) btw ไม่จำเป็นต้องสร้างโฟลเดอร์สาธารณะเพิ่มเติมในอัปเดต cli พวกเขามีชื่อ asstes เหมือนกันแล้ว
Pardeep Jain

ฉันมีปัญหาคล้ายกันกับไฟล์ที่มีนามสกุลอื่น ๆ (เช่น.sgf) ฉันต้องการโฮสต์ไฟล์เหล่านั้นและลิงก์ไปยังไฟล์เหล่านั้นจากแอปพลิเคชัน แต่เห็นได้ชัดว่าการใส่ลงในassetsโฟลเดอร์นั้นไม่เพียงพอ ความคิดใด ๆ ?
bvdb

คำตอบ:


75

ฉันซ่อมมัน. ชื่อไฟล์ภาพที่แท้จริงของฉันมีช่องว่างอยู่และด้วยเหตุผลใดก็ตามที่ Angular ไม่เป็นเช่นนั้น เมื่อฉันลบช่องว่างออกจากชื่อไฟล์ของฉันใช้assets/images/myimage.pngงานได้


63

ในโครงการของฉันฉันใช้ไวยากรณ์ต่อไปนี้ใน app.component.html ของฉัน:

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

หรือ

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

ใช้ [src] เป็นนิพจน์เทมเพลตเมื่อคุณผูกคุณสมบัติโดยใช้การแก้ไข:

<img [src]="imagePath" />

เหมือนกับ:

<img src={{imagePath}} />

ที่มา: วิธีการผูก img src ใน angular 2 ใน ngFor?


1
app.component.html และโฟลเดอร์ assets ของคุณอยู่ในระดับเดียวกันหรือไม่
Halil

ไม่โครงสร้างโฟลเดอร์ถูกสร้างขึ้นโดยอัตโนมัติและคุณควรมีโฟลเดอร์เดียวกันกับฉัน: project-folder \ src \ assests \ และ project-folder \ app \ app.component.html หากสิ่งนี้ช่วยได้โปรดโหวต
mruanova

26

Angular-cli รวมโฟลเดอร์ assets ไว้ในตัวเลือกการสร้างตามค่าเริ่มต้น ฉันพบปัญหานี้เมื่อชื่อรูปภาพของฉันมีช่องว่างหรือขีดกลาง ตัวอย่างเช่น :

  • "my-image-name.png" ควรเป็น "myImageName.png"
  • 'my image name.png' ควรเป็น 'myImageName.png'

หากคุณใส่รูปภาพในโฟลเดอร์ assets / img โค้ดบรรทัดนี้ควรใช้งานได้ในเทมเพลตของคุณ:

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

หากปัญหายังคงมีอยู่ให้ตรวจสอบว่าไฟล์กำหนดค่า Angular-cli ของคุณหรือไม่และตรวจสอบให้แน่ใจว่ามีการเพิ่มโฟลเดอร์สินทรัพย์ในตัวเลือกการสร้าง


1
[alt] ไม่จำเป็นสำหรับสตริง [] ใช้สำหรับการผูกข้อมูล
chris_r

14

เฉพาะสำหรับ Angular2 ถึง 5 เราสามารถผูกเส้นทางรูปภาพโดยใช้คุณสมบัติการผูกด้านล่าง เส้นทางรูปภาพถูกล้อมรอบด้วยเครื่องหมายอัญประกาศเดี่ยว

ตัวอย่างตัวอย่าง

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


src = "assets / img / klogo.png" กับ [src] = "'assets / img / klogo.png'" แตกต่างกันอย่างไร
gdbj

@gdbj นี่คือคำตอบstackoverflow.com/questions/41426974/…
mohit uprim

โดยพื้นฐานแล้วเราใช้ [src] เพื่อผูกกับโมเดลหากเราต้องการที่จะสามารถเปลี่ยน src โดยใช้วิธีนั้น
gdbj

ขอบคุณ mohit สำหรับการตอบกระทู้ @gdbj ฉันหวังว่าคุณจะมีความสับสนในตอนนี้
Bhuwan Maharjan

แค่อยากจะชี้ให้ผู้อ่านในอนาคตมองหาคำพูดเดี่ยวด้านในในความคิดเห็นแรกที่นี่โดย gdbj พวกเขามองเห็นในแบบอักษรความคิดเห็นได้ยากกว่าคำตอบด้านบน แต่การพลาดอาจทำให้เกิดความสับสนได้ (อาจขึ้นอยู่กับเบราว์เซอร์ของคุณไม่แน่ใจ)
SilithCrowe

7

โดยปกติ "แอป" เป็นรากของแอปพลิเคชันของคุณคุณลองapp/path/to/assets/img.pngหรือยัง?


angular-cli ใส่appและassetsโฟลเดอร์แยกต่างหากภายใต้srcโฟลเดอร์ (ขออภัยฉันไม่แน่ใจว่าฉันควรจัดรูปแบบโครงสร้างโฟลเดอร์และชื่ออย่างไร)
user3183717

6

1. เพิ่มบรรทัดนี้ที่ด้านบนในส่วนประกอบ

declare var require: any

2. เพิ่มบรรทัดนี้ในคลาสส่วนประกอบของคุณ

imgname= require("../images/imgname.png");
  1. เพิ่ม 'imgname' นี้ในแท็ก img src บนหน้า html

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


จะดีกว่าสำหรับโครงสร้างลำดับชั้นของไฟล์ที่ไม่แบน
chris_r

-1

สำหรับฉัน "ฉัน" เป็นทุนใน "รูปภาพ" ซึ่งยังไม่ชอบ angular-cli ดังนั้นจึงเป็นกรณีที่ละเอียดอ่อน


ไม่แน่ใจ. ทำไมคนถึงชอบโหวตในแง่ลบ นี่เป็นปัญหาจริงที่ฉันประสบ และยังโหวตลบ ฉันสงสัยว่าทำไมบางคำถามของฉันถึงไม่มีคำตอบและไม่มีคนโหวตเพื่อแก้ไข ??
ผู้สร้างนิรนาม

-1

ขึ้นอยู่กับว่าไฟล์ html ของคุณอยู่ที่ไหนซึ่งอ้างถึงเส้นทางของทรัพยากรแบบคงที่ (ในกรณีนี้คือรูปภาพ)

ตัวอย่าง A:

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

ในขณะที่คุณสามารถดู yourpage.html เป็นหนึ่งโฟลเดอร์ห่างจากราก (โฟลเดอร์ src) ด้วยเหตุผลนี้มันต้องจำนวนหนึ่ง../ที่จะกลับไปยังรากไปแล้วคุณสามารถเดินไปยังภาพจากราก:

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

ตัวอย่าง B:

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

ที่นี่คุณต้องไปที่ต้นไม้ 2 โฟลเดอร์:

<img class="img-responsive" src="../../assests/images/myimage.png">
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.