Vue.js 2.0 this.$compile

2024-03-23

如何在组件方法中将 HTML 字符串编译为模板? 这在 Vue 1 中是可能的,如下所示jsfiddle http://jsfiddle.net/chrislandeza/syewmx4e/

new Vue({
    el: '#app',
    data: {
        sampleElement: '<button v-on="click: test()">Test</button>'

    },
    methods:{
        addNewElement: function(){

           var element = $('#app').append(this.sampleElement);
            /* compile the new content so that vue can read it */
           this.$compile(element.get(0));
        },
        test: function(){
           alert('Test');
        }
    }
});

在 Vue 2 中如何做到这一点?


然而,这已经不可能了,Vue 2是数据驱动的,因此您根本不应该尝试手动影响 DOM,而是应该将元素绑定到视图模型中的基础数据。考虑到这一点,您的示例将需要重写。首先,首先将您的元素设为component:

Vue.component('my-button', {
  template: '<button v-on:click="test()">{{text}}</button>',
  props: ['text'],
  methods: {
    test() {
      alert('Test');
    }
  }
});

然后您可以创建主视图模型并使用 v-for 添加按钮组件:

Markup:

  <button v-on:click="addNewElement()">Add Element</button>
  <my-button v-for="button in buttons" :text="button"></my-button>

查看型号:

new Vue({
  el: '#app',
  methods: {
    addNewElement: function() {
       this.buttons.push('Test');
    }
  },
  data: {
    buttons: []
  }
});

在此示例中,我们将按钮推送到一个数组,然后该数组将显示在页面上,而不是手动将它们附加到模板中。

这是 JSFiddle:http://jsfiddle.net/10q9je5a/ http://jsfiddle.net/10q9je5a/

如果你想要更通用的东西,那么你可以简单地创建一个数组different components并使用:is让 Vue 知道要渲染哪个组件:

Markup:

<div id="app">
  <button v-on:click="addNewElement()">Add Element</button>
  <div :is="element.component" v-for="element in elements" v-bind="element.props"></div>
</div>

查看型号:

new Vue({
  el: '#app',
  methods: {
    addNewElement: function() {
       this.elements.push({component: 'my-button', props: {text: 'Test'}});
    }
  },
  data: {
    elements: []
  }
});

这是 JSFiddle:http://jsfiddle.net/cxo5eto0/ http://jsfiddle.net/cxo5eto0/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue.js 2.0 this.$compile 的相关文章

  • (Vue.js)我想让图像1在我点击图像1时弹出,我希望图像2在我点击图像2时弹出

    有几个图像 我想让当我点击图片1时弹出图片1 当我点击图片2时我想让图片2弹出 我可以使用类中的索引解决它吗 Carousel vue
  • Vue.js $children 按组件名称

    我正在尝试按名字访问特定的孩子 目前 由于孩子所在的位置 我这样称呼孩子 this root children 0 没关系 只要那个孩子总是 0 但如果有一种方法可以做类似的事情那就太好了 this root children detail
  • 获取所有输入值 - Vuejs

    我有多个input简单 VueJs 应用程序中的元素 但我没有 和 表单元素 现在我想一次获取所有输入值并发送到服务器端 laravel 进行处理 div div
  • 从 vueJS 方法调用 setTimeout() 不起作用

    我试图允许用户从应用程序重置或关闭给定服务器 我现在正在开发界面 并希望向用户提供有关正在发生的事情的消息 我显示数据对象中定义的消息来指示所采取的操作 我使用 setTimeout 来切换重置 消息和重置消息 请参阅以下方法 system
  • 如何在 vue.config.js 中设置用于生产的 API 路径?

    我使用 vue cli3 进行设置 我已经在中设置了 devServer apivue config js file devServer proxy api target http localhost 1888 apps test main
  • 外部 API 的 CORS 问题 - 通过 PostMan 工作,但不能使用 Axios 进行 HTTP 请求 [重复]

    这个问题在这里已经有答案了 正在开发一个涉及汽车数据的新 Laravel 项目 并找到了一个免费的查找 API http www carqueryapi com documentation api usage 一个示例端点是 https w
  • Vue.js 隐藏当前视口之外的项目

    我正在 Vue js 中制作一个电子商务类型的菜单 其中的项目是包含大量功能和图像的 div 当渲染大约 200 个这样的项目时 性能相当不错 但是当添加的数量超过这个数量时 网站的性能开始变得缓慢 如果 Vue 元素位于当前可滚动视图之外
  • Vue Test Utils 中的“存根子组件”是什么?

    Vue 测试工具 https vue test utils vuejs org有一个名为的 API 方法shallowMount https vue test utils vuejs org api shallowmount that 创建
  • 为 v-html 添加 CSS 样式

    我想在 HTML 代码中添加样式v html 我尝试了几种解决方案 但没有任何功能 这是我的代码 模板 div class para div 脚本 export default data return value h2 TITLE h2 p
  • vue 组件中的 Csrf 令牌

    我有集成了 Vue js 的 Laravel 5 3 项目 我想使用CSRF TOKEN以我的形式 表单html代码在Vue组件文件中 resources assets js bootstrap js 我有这个 Vue http inter
  • 如果不刷新页面,Vuex 状态不会更新

    我正在构建一个单页面应用程序 用户可以根据他们是否登录来看到不同的页面 登录调用工作正常 授权令牌保存在本地存储中 设置 我已经设置了一个名为的吸气剂loggedIn返回true如果在状态上设置了令牌 这是我的确切代码auth js商店模块
  • VueJS/浏览器缓存生产版本

    我有一个 VueJS 应用程序 每当我跑步时npm run build它创建了一组新的dist 文件 但是 当我将它们加载到服务器上 删除旧版本后 并在浏览器中打开页面时 它会加载旧版本 我假设从缓存 当我刷新页面时 它加载新代码没有问题
  • 停止接收来自被破坏的子组件的事件

    我有一个父级 我可以在其中动态添加子组件 当在挂载中添加子组件时 我为事件注册一个侦听器 EventBus on content type saving function logic here 问题是 当通过从子组件数组中删除该组件而在父组
  • 如何使用 VueJS 将 API 中的数据存储在 localStorage 中

    我使用 VueJS 练习简单的 SPA 要求我监听 API 并将其一些数据保存在浏览器的 localStorage 中 但是我对 VueJS 仍然不是很有经验 所以我不知道如何获取特定数据并保存将其发送给 LS 以便登录用户稍后可以看到他们
  • quasar:构建应用程序时出现 vite 错误

    当我做quasar build它给出以下内容 deb2302user deb2302 tmp2303 vue kitty quasar build d88888b d88P Y88b 888 888 888 888 888 888 8888
  • 即使在客户端设置 Access-Control-Allow-Origin 或其他 Access-Control-Allow-* 标头后,仍会出现 CORS 错误

    我有一个使用以下命令生成的 Vue 应用程序webpack simple选项 我正在尝试做一个GET请求https api forismatic com api 1 0 method getQuote format json lang en
  • 查询 Firestore 中的特定日期

    我正在尝试查询 Firestore 中的指定日期 到目前为止我已经尝试过这段代码 let ref db collection schools doc DglhflywuybkOuCq7tGW let start new Date 2018
  • Vue - 如何附加组件?

    我正在尝试创建一个按钮 一旦按下该按钮 就会向我的组件添加一个子组件 我的代码可以工作 只是 HTML 被解析为字符串 这是父组件
  • 如何基于Vuetify创建自己的组件库

    我想基于 Vuetify 创建我的组件库并在 npm 上发布 Vuetify 已经有 vue plugin 标准安装并使用 vuetify loader 我认为这是一个比纯 HTML 组件更复杂的场景 例如 我想创建我的登录表单 my 文章
  • Vue - API 调用属于 Vuex 吗?

    我正在努力寻找在 vue 模块中理想的 API 调用位置的答案 我不是在构建 SPA 例如 我的 auth 块有几个用于登录 密码重置 帐户验证等的组件 每个块都使用 axios 进行 API 调用 Axios 已经提供了异步的 Promi

随机推荐