如何向内容动态添加元素?下面的例子:

<template>
    {{{ message | hashTags }}}
</template>

<script>
    export default {
        ...

        filters: {
            hashTags: function(value) {
                // Replace hash tags with links
                return value.replace(/#(\S*)/g, '<a v-on:click="someAction()">#$1</a>')
            }
        }
    }
</script>

问题是,如果我按下链接,就不会触发任何动作.Vue没有看到新的元素.

推荐答案

Update:

var v = new Vue({
  el: '#vue',
  data: {
    message: 'hi #linky'
  },
  computed: {
    dynamicComponent: function() {
      return {
        template: `<div>${this.hashTags(this.message)}</div>`,
        methods: {
          someAction() {
            console.log("Action!");
          }
        }
      }
    }
  },
  methods: {
    hashTags: function(value) {
      // Replace hash tags with links
      return value.replace(/#(\S*)/g, '<a v-on:click="someAction">#$1</a>')
    }
  }
});

setTimeout(() => {
  v.message = 'another #thing';
}, 2000);
<script src="//unpkg.com/vue@latest/dist/vue.js"></script>
<div id="vue">
  <component :is="dynamicComponent" />
</div>

Vue绑定不会发生在插值HTML上.你需要Vue视为模板的东西,比如a partial.然而,Vue只对部分应用绑定一次;您不能返回并更改模板文本,然后将其重新绑定.因此,每次模板文本更改时,都必须创建一个新的分部.

HTML中有一个<partial>标记/元素,它接受一个变量名,因此过程如下:

  • 模板HTML会发生变化
  • 为新模板HTML注册新的部分名称
  • 更新name变量,以便呈现新的局部

每次有变化时注册新的东西有点可怕,所以如果可能的话,最好使用一个具有更 struct 化模板的组件,但是如果你真的需要完全动态的HTML绑定,它可以工作.

下面的例子从一条消息开始,根据你的过滤器链接,两秒钟后更改message.

您可以只使用message作为注册部分的名称,但需要一个在注册后返回该名称的计算机,否则它会在注册名称之前try 呈现.

var v = new Vue({
  el: 'body',
  data: {
    message: 'hi #linky'
  },
  computed: {
    partialName: function() {
      Vue.partial(this.message, this.hashTags(this.message));
      return this.message;
    }
  },
  methods: {
    someAction: function() {
      console.log('Action!');
    },
    hashTags: function(value) {
      // Replace hash tags with links
      return value.replace(/#(\S*)/g, '<a v-on:click="someAction()">#$1</a>')
    }
  }
});

setTimeout(() => {
  v.$set('message', 'another #thing');
}, 2000);
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<partial :name="partialName"></partial>

Vue.js相关问答推荐

Vutify-v-工具提示-不使用键盘轻击按钮显示

在 Vue 中更改 json 数据后,如何在屏幕上重新呈现表格组件?

使用 Vue Js 运行 Jest 测试时出现语法错误:无法在模块外使用 import 语句

vuejs中watch方法和计算方法有什么区别

在 vuejs 中将旧代码修改为 vue router 4

如何在某些异步数据(在 Vuex 存储中)加载之前防止任何路由?

Vue test-utils 如何测试 router.push()

是否可以在 vue-devtools 中命名 Vue 实例?

Vue路由保持活动和挂载行为

使用 Vee-Validate 在提交时验证子输入组件

如何在 vuetify 中将工具提示添加到数据表标题?

所有 vue props和数据都给出错误 Property属性在 type 上不存在,带有 typescript

即使在生产模式下构建,VueJS 也会显示开发模式开发模式消息

中文而不是英文的Element UI分页

找不到模块 'babel-core' 但已安装 @babel/core

无法访问函数内的数据属性

Bootstrap-vue:如何将数据传递给模态?

在子元素 vueJS.2 之间切换active类

Axios 请求拦截器在我的 vue 应用程序中不起作用

在 vue js 中的何处以及如何存储 API 端点?