【问题标题】:Adding custom HTML element inside template using functions Vue.js使用函数 Vue.js 在模板中添加自定义 HTML 元素
【发布时间】:2023-02-01 19:53:08
【问题描述】:

有什么方法可以使用 javascript 函数在模板标签内呈现带有自定义属性的 html 元素?

例如我试图实现的目标:

<template>
  <div class="test">
    {{ testFunction(param1,param2,param3) }}
  </div>
</template>


<script>
export default {
....
  methods: {
    testFunction(param1,param2,param3) {
      return `<button @click="function()">Click</button>`;
   }
  }
};
</script>

【问题讨论】:

    标签: javascript html vue.js dom vuejs3


    【解决方案1】:

    直接你会得到内插的 html,就像这样

    <button @click="function()">Click</button>
    

    即使您使用 v-html directive 修复它以输出 raw HTML 按钮仍然无法使用。

    正确的方法就是像这样使用Render Functions

    const myComponent3 = {   
      setup(props) {
        return () => h('button',  
          {
            onClick(event) {
              alert('Click');
            }
          },
          'Click Me!'
        )
      }
    }
    

    这是带有示例的游乐场:

    const { createApp, h } = Vue;
    
    const myComponent1 = {   
      template: '#my-component',
      methods: {
        testFunction(par1) {
          return `<button @click="function()">Click</button>`;
        }
      }
    }
    
    const myComponent2 = {   
      template: '<div v-html="rawHTML()"></div>',
      methods: {
        myClick() {    
          alert('Click');
        },
        rawHTML(par1) {
          return '<button @click="myClick()">Click</button>';
        }
      }
    }
    
    const myComponent3 = {   
      setup(props) {
        return () => h('button',  
          {
            onClick(event) {
              alert('Click');
            }
          },
          'Click Me!'
        )
      }
    }
    
    const App = {
      components: { 
        myComponent1,  myComponent2, myComponent3
      }
    }
    
    const app = createApp(App)
    app.mount('#app')
    <div id="app">  
      My Component 1: <my-component1></my-component1><br/>
      My Component 2: <my-component2></my-component2><br/>
      My Component 3: <my-component3></my-component3><br/>
    </div>
    <script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
    
    <script type="text/x-template" id="my-component">
      <div class="test">
        {{ testFunction( param1 ) }}
      </div>
    </script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多