有人知道如何继承 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/