반응형
v-html의 Vue 구성 요소/요소
나는 가지고 있다post.text
사용자가 제출한 블로그 게시물의 텍스트를 포함하는 데이터 트위터에서처럼, 사용자는 sintax를 사용하여 다른 사용자를 언급할 수 있습니다.I am tagging @user1 in this post
투고를 렌더링할 때 모든 투고를 교체하고 싶다.@username
지정된 사용자의 페이지에 대한 링크가 있는 인스턴스.
regex 일치/교체를 통해 언급한 내용을 쉽게 변환할 수 있습니다.@username
(vue-router를 사용하고 있습니다):
I am tagging <router-link :to="{name: 'user', params: {userId: post.userId}}">{{ dPost.user_name }}</router-link> in this post
하지만 이렇게 사용하면:
<p v-html="preparedText"></p>
vue는 html을 재처리하여 자체 태그를 바인딩하지 않습니다.
이 문제를 어떻게 해결하나요?고마워요.
통상적인 Vue 패러다임을 깨고 싶지만 를 사용하여 실행할 수 있습니다.를 사용해야 합니다.Vue.compile
렌더링 기능을 생성한 후 컴포넌트가 마운트된 후 수동으로 새 Vue 인스턴스를 만듭니다.
다음은 예를 제시하겠습니다.
Vue.component('post', {
template: `<div></div>`,
props: { text: String },
mounted() {
let regex = /\B\@([\w\-]+)/gim;
let username = this.text.match(regex)[0];
let linkText = this.text.replace(regex, `<a href="#">${username}</a>`);
let res = Vue.compile(`<p>${linkText}</p>`);
let { render, staticRenderFns } = res;
new Vue({ el: this.$el, render, staticRenderFns })
}
})
new Vue({
el: '#app',
data() {
return { text: `Hi @user1, how are you?` }
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.min.js"></script>
<div id="app">
<post :text="text"></post>
</div>
사용할 필요가 없습니다.v-html
.
컴포넌트를 동적으로 렌더링하려면:is="your component name"
.
언급URL : https://stackoverflow.com/questions/46584301/vue-components-elements-in-v-html
반응형
'programing' 카테고리의 다른 글
Java에서 어레이를 초기화하는 방법 (0) | 2022.08.01 |
---|---|
Vuex getter가 클라이언트 측에서는 TRUE를 반환하고 서버 측에서는 FALSE를 반환하는 이유는 무엇입니까? (0) | 2022.08.01 |
유용한 Eclipse Java 코드 템플릿 찾기 (0) | 2022.08.01 |
Java Builder 클래스 하위 분류 (0) | 2022.08.01 |
vuejs의 데이터 메서드에서 소품 값에 액세스할 수 없습니다. (0) | 2022.07.31 |