vue javascript 내 정적 자산 참조 방법
뷰 자바스크립트 내의 이미지와 같은 정적 자산을 참조할 수 있는 올바른 URL을 찾고 있습니다.
예를 들어, 사용자 지정 아이콘 이미지를 사용하여 리플릿 마커를 만들고 있는데 여러 URL을 시도해 보았지만 모두 반환됩니다.404 (Not Found)
:
메인.뷰:
var icon = L.icon({
iconUrl: './assets/img.png',
iconSize: [25, 25],
iconAnchor: [12, 12]
});
자산 폴더와 정적 폴더에 이미지를 넣으려고 했지만 운이 없었습니다.어떻게든 이미지를 로드하려면 vue에 말해야 합니까?
템플릿에서 이미지를 참조하고 싶은 모든 사용자는 '@'을 사용하여 이미지를 직접 참조할 수 있습니다.
예:
<img src="@/assets/images/home.png"/>
Vue 정규 설정에서,/assets
제공되지 않습니다.
이미지는src="data:image/png;base64,iVBORw0K...YII="
대신에 문자열을 사용합니다.
자바스크립트 내에서 사용하기:require()
JS 코드에서 이미지를 가져오려면 을 사용합니다.경로는 상대적이어야 합니다(아래 참조).
당신의 코드는 다음과 같습니다.
var icon = L.icon({
iconUrl: require('./assets/img.png'), // was iconUrl: './assets/img.png',
// iconUrl: require('@/assets/img.png'), // use @ as alternative, depending on the path
// ...
});
상대경로사용
예를 들어 다음과 같은 폴더 구조를 가지고 있다고 가정합니다.
- src
+- assets
- myImage.png
+- components
- MyComponent.vue
이미지를 참조하려면MyComponent.vue
, 길이라야 합니다.../assets/myImage.png
여기에 데모 코드와 상자가 있습니다.
더 나은 해결책은
@acdcjunior의 답변에 몇 가지 모범 사례와 안전성을 추가하여 사용하기@
대신에./
자바스크립트에서
require("@/assets/images/user-img-placeholder.png")
JSX 템플릿에서
<img src="@/assets/images/user-img-placeholder.png"/>
사용.@
에 대한 지적합니다.src
디렉토리 입니다.
사용.~
는 프로젝트 루트를 가리키며, 이를 통해 더 쉽게 액세스할 수 있습니다.node_modules
기타 루트 수준 리소스
웹팩이 올바른 자산 경로를 반환하려면 require('./relative/path/to/file.jpg')를 사용해야 합니다. 이는 파일로더에서 처리되어 확인된 URL을 반환합니다.
computed: {
iconUrl () {
return require('./assets/img.png')
// The path could be '../assets/img.png', etc., which depends on where your vue file is
}
}
스크립트 태그를 연 직후에 추가하기만 하면 됩니다.import someImage from '../assets/someImage.png'
아이콘 URL에 사용합니다.iconUrl: someImage
마침내 나에게 효과가 있었고, 이미지는 지지자로 전달되었습니다.
<img :src="require(`../../assets/${image}.svg`)">
어떤 시스템을 사용하고 계십니까?웹팩?Vue-loader?
여기서 브레인스토밍만 하고...
.png는 자바스크립트 파일이 아니기 때문에 파일로더 또는 url로더를 사용하여 이를 처리하도록 웹팩을 구성해야 합니다.vue-cli로 스캐폴드된 프로젝트에서도 이를 구성했습니다.
한 번 보시면 됩니다.webpack.conf.js
이렇게 잘 구성되어 있는지 확인하기 위해서.
...
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
...
/assets
는 번들링 중에 웹팩에 의해 처리되는 파일을 위한 것입니다. 이를 위해서는 자바스크립트 코드 어딘가에서 참조되어야 합니다.
./static
이 로 됩니다./dist
후에 있는 그대로
다음과 같이 변경할 것을 권장합니다.
iconUrl: './assets/img.png'
로.
iconUrl: './dist/img.png'
공식 문서는 여기에서 읽을 수 있습니다. https://vue-loader.vuejs.org/en/configurations/asset-url.html
도움이 되기를 바랍니다!
다음과 같이 require 구문을 사용하면 효과가 있습니다.
$('.eventSlick').slick({
dots: true,
slidesToShow: 3,
slidesToScroll: 1,
autoplay: false,
autoplaySpeed: 2000,
arrows: true,
draggable: false,
prevArrow: '<button type="button" data-role="none" class="slick-prev"><img src="' + require("@/assets/img/icon/Arrow_Left.svg")+'"></button>',
환경에 따라 자산 경로를 정의할 수 있습니다.
const dev = process.env.NODE_ENV != 'production';
const url = 'https://your-site.com';
const assets = dev ? '' : url;
<template>
<img :src="`${assets}/logo.png`"/>
<p>path: {{assets}}</p>
</template>
<script>
export default {
data: () => ({
assets
})
}
</script>
이상적으로 이는 utilsjs 파일 안에 있거나 확장 앱이 속성을 정의하는 방식으로 다음과 같습니다.
const app = createApp(component);
app.config.globalProperties.$assets = assets;
app.mount(element);
다음과 같이 제공됩니다.
<template>
<img :src="`${$assets}/logo.png`"/>
<p>path: {{$assets}}</p>
</template>
<script>
export default {
mounted() {
console.log(this.$assets);
}
}
</script>
에서(:src/assets
에 배치하고 고 HTML다를 참조할 수 .<img src="../src/assets/img/logo.png">
(배치 시에도 변경 사항 없이 자동으로 작동함).
Vue와 함께 타이프스크립트를 사용하고 있지만 이렇게 진행했습니다.
<template><div><img :src="MyImage" /></div></template>
<script lang="ts">
import { Vue } from 'vue-property-decorator';
export default class MyPage extends Vue {
MyImage = "../assets/images/myImage.png";
}
</script>
생성, 마운트 또는 필요한 곳에 로드
async created() {
try {
this.icon = (await import('@assets/images/img.png')).default;
} catch (e) {
// explicitly ignored
}
그리고 나서.
<img :src=icon />
인사이드 코드는 이미지를 직접 사용할 수 있습니다.
const src = require("../../assets/images/xyz.png");
아니면
이미지를 동적으로 로드하려면 이것이 필요합니다.
const image = new window.Image();
image.src = require("../../assets/images/xyz.png");
image.onload = () => {
// do something if needed
};
더 JS의, 에 해야 import
번들러(또는 웹팩 방문)에서 픽업할 이미지입니다.개발 모드와 프로덕션 모드에서 모두 실행할 때 다음 솔루션이 작동합니다.
import iconUrl from '@/assets/img.png';
const icon = L.icon({
iconUrl: iconUrl,
iconSize: [25, 25],
iconAnchor: [12, 12]
});
언급URL : https://stackoverflow.com/questions/47313165/how-to-reference-static-assets-within-vue-javascript
'programing' 카테고리의 다른 글
C에서 빠르고 효율적인 최소 제곱 적합 알고리즘? (0) | 2023.10.14 |
---|---|
인스턴스가 하나만 있는 경우 인스턴스 또는 클래스 특성을 사용해야 합니까? (0) | 2023.10.14 |
재미 함수의 반환 값이 7이 아닌 8인 이유는 무엇입니까? (0) | 2023.10.14 |
NULL일 때 MAX 기능으로 0을 설정하는 방법은? (0) | 2023.10.14 |
인덱스를 값으로 사용하여 목록을 사전으로 변환하는 방법은 무엇입니까? (0) | 2023.10.14 |