javascript - 有没有办法在VueJS中使用mixin继承模板

标签 javascript vue.js

有人知道如何继承 mixin 及其模板吗?或者如何从 mixin 中注入(inject)动态元素或组件?

编辑: 我不想修改问候语组件,我有两个 Mixins:添加方法 raise404() 并显示 100% 层的 404Mixin 和具有在 Angular 落显示微调器的 loading() 方法的 LoaderMixin。我可以继承他们的方法,但我必须在我想使用它的每个组件中复制 html。

谢谢

mixin = {
  template: '<p>{{ foo }}</p>',
  data() {
    return {
      foo: 'Hello',
    };
  },
}

// This should  be <div><p>Hello</p><p>World!</p></div>
Vue.component('greeting', {
  mixins: [mixin],
  template: '<div><p>World!</p></div>'
});

var vm = new Vue({
  el: '#app'
});
<script src="https://cdn.jsdelivr.net/vue/1.0.16/vue.js"></script>
<div id="app">
  <greeting></greeting>
</div>

最佳答案

多年后,我可以想象出一个优雅的解决方案,也许使用类、 typescript 或在 mixin 中创建组件 super 的注解会更优雅,但就目前而言,问题已部分解决。

GreetingMixin = {
  data() {
    return {
      greeting: 'Hello',
    };
  },
  provide() { return {child: this}},
  components: {
    super: {
      inject: ['child'],
      template: '<div class="blue">{{ child.greeting }} <strong><slot /></strong></div>',
    }
  },
}


// This should be <div class="blue">Hello <strong>World!</strong></div>
Vue.component('welcomeWorld', {
  mixins: [GreetingMixin],
  template: '<super>World!</super>',
});

// This should be <div class="blue">Hi <strong><i>ali</i></strong></div>
Vue.component('welcomeName', {
  mixins: [GreetingMixin],
  props: ["name"],
  created() { this.greeting = "Hi" },
  template: '<super><i>{{ name }}</i></super>',
});

// This should be <h1><div class="blue">Hello <strong>World</strong></div></h1>
Vue.component('welcomeH1', {
  mixins: [GreetingMixin],
  props: ["name"],
  template: '<h1><super>{{ name }}</super></h1>',
});


var vm = new Vue({
  el: '#app'
});
.blue {
color: blue
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <welcome-world></welcome-world>
  <welcome-name name="Ali"></welcome-name>
  <welcome-h1 name="Ali"></welcome-h1>
</div>

关于javascript - 有没有办法在VueJS中使用mixin继承模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45001604/

相关文章:

javascript - 有没有一种方法可以强制从父组件重新渲染子组件,而不需要在 React 中更改其 props?

javascript - Vue 自定义过滤器在全局定义时不起作用

javascript - 将用户输入直接保存到 JQuery 中的变量中

javascript - AngularJS:混合来自两个 JSON 文件的数据

javascript - 如何在 Vue.js 中用组件动态包装子字符串?

javascript - Fusioncharts 使用 vue 和 laravel 显示来自 Controller 的数据,其中条件是 count 和 group

javascript - vue.js动态添加输入v-model不起作用

javascript - "Module not found"将 Nuxtjs 应用程序部署到 Netlify 时出错

javascript - 创建一个以视频为背景的部分 HTML5

javascript - Chrome 错误?文件输入后无法将标签大写