vue.js - VueJS 使用 v-html 渲染 html 字符串中的属性

标签 vue.js nuxt.js

Editor Content

我有一个从编辑器获取并存储在数据库中的 html 字符串。

<h3><a href="#" rel="noopener noreferrer nofollow"><em><strong>Profile Of User:</strong></em></a></h3><p></p><p>{{user}}</p>

我想从数据库中检索它并将其呈现为 HTML。当我使用 v-html 时,它将呈现为:

<v-card-text v-html="content"></v-card-text>

用户资料:

{{user}}

如果我有这样的数据属性,如何从数据属性渲染 {{hello}}:

data() {
        return {
            user: "Lim Socheat",
            content:"<h3><a href="#" rel="noopener noreferrer nofollow"><em><strong>Profile Of User:</strong></em></a></h3><p></p><p>{{user}}</p>"
        };
    },

预期结果:

用户简介:

Lim Socheat

因为{{ user }}将被渲染为Lim Socheat

最佳答案

使内容成为计算属性。然后像这样使用它:

  computed: {
    content() {
       return '<h3><a href="#" rel="noopener noreferrer nofollow"><em><strong>Profile Of User:</strong></em></a></h3><p></p><p>' + this.user + '</p>';
    }
  }

您可以通过这种方式使用数据中定义的所有变量。

更新: 由于 OP 从后端获取 HTML 字符串,因此在这种情况下他们需要替换变量。 我们保留了可能出现的所有变量的映射,然后动态创建正则表达式来替换代码中的所述键。

  computed: {
    content() {
      // keep a map of all your variables
      let valueMap = {
        user: this.user,
        otherKey: 250
      };
      let value = '<h3><a href="#" rel="noopener noreferrer nofollow"><em><strong>Profile Of User:</strong></em></a></h3><p></p><p>{{user}}</p>';
      let allKeys = Object.keys(valueMap);
      allKeys.forEach((key) => {
        var myRegExp = new RegExp('{{' + key + '}}','i');
        value = value.replace(myRegExp, valueMap[key]);
      });
      return value;
    }
  }

关于vue.js - VueJS 使用 v-html 渲染 html 字符串中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59782289/

相关文章:

javascript - vuejs - 如何捕获输入名称中的值?

php - Laravel Eloquent 转json

Vue.Js:别名配置

laravel - 如何隐藏http请求头?

html - vue js 组件中的原始 html(使用 nuxt)

javascript - “没有创建 Firebase 应用程序 '[DEFAULT]'”,即使调用了 initializeApp

javascript - nuxtjs中如何控制路由渲染

javascript - nuxt 构建(SPA)生成 ./nuxt/dist/**

vue.js - useMeta 不更新 Nuxt Composition API 中的标题

vue.js - 我在 asyncData 中遇到非常慢的 Axios 请求