Javascript Vue JS Vuetify菜单名为“插槽”;激活剂;未绑定到模板,但将转到;“违约”;
我似乎无法让Vuetify v-menu的示例代码在我的PWA应用程序中工作,但它在小提琴中正常工作(例如) 问题是:激活器插槽内容没有出现 通过调试vuetify源代码,我发现激活器模板出现在“默认”窗口(所有隐藏内容都在该窗口中)下,而不是在命名的激活器窗口(可见按钮/单击区域应该在该窗口中) 我已经将我的应用程序简化到了最简单的部分(最初我有动态组件、表单、API等),所以我将其简化为顶级v-app元素中的一个v-menu,并删除了所有路由器、商店和其他插件。它尽可能简单,但仍然不起作用。fiddle和我的本地应用程序之间唯一的区别就是构建系统 我还尝试通过按钮更改/删除插槽道具和上的绑定,这会修改命名插槽在Vuetify(或Vue)中的内部表示方式。但是,无论是否使用道具,verison都不能正确绑定指定的插槽 我还更新和重建了npm(在另一个SO中建议),因此我使用最新的Vue 2.6.10和Vuetify 1.5.14 我还确保我正在包装Javascript Vue JS Vuetify菜单名为“插槽”;激活剂;未绑定到模板,但将转到;“违约”;,javascript,node.js,vue.js,babeljs,vuetify.js,Javascript,Node.js,Vue.js,Babeljs,Vuetify.js,我似乎无法让Vuetify v-menu的示例代码在我的PWA应用程序中工作,但它在小提琴中正常工作(例如) 问题是:激活器插槽内容没有出现 通过调试vuetify源代码,我发现激活器模板出现在“默认”窗口(所有隐藏内容都在该窗口中)下,而不是在命名的激活器窗口(可见按钮/单击区域应该在该窗口中) 我已经将我的应用程序简化到了最简单的部分(最初我有动态组件、表单、API等),所以我将其简化为顶级v-app元素中的一个v-menu,并删除了所有路由器、商店和其他插件。它尽可能简单,但仍然不起作用。
(但这发生在我安装Vuetify插件时),正如其他SO中所述
我还读了一些在调试中有用的东西
我已经尝试将slot=activator
直接放在HTML标记上,而不是使用模板
我可能尝试了十几种其他方法(最初我只是对v-on的on
有一个问题,但这是由于这个潜在的问题)
这些是我的简化文件-都是非常标准的:
App.vue(带/不带事件绑定道具)
插件/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
import 'vuetify/src/stylus/app.styl'
Vue.use(Vuetify, {
iconfont: 'md',
})
index.html
当它运行时,我在node_modules/vuetify/src/components/VMenu/mixins/menu generators.js中设置了一个断点,它在这里返回null,因为没有设置任何类型的插槽:
genActivator: function genActivator() {
if (!this.$slots.activator && !this.$scopedSlots.activator) return null;
在我的应用程序中,Chrome debug inspector显示v-btn
在default
$slot
下的p
标签旁边,但它应该在自己的标签下
在工作小提琴中相比之下,在调试相同的功能时,当我包括v-on=on事件绑定时,我会在$scopeSlots
下看到激活器
节点,如果没有,则在$slots
下看到。而且效果很好
为什么v-slot=activator
语句不能生效?在阅读了这个答案后:我发现旧的(Vue v2.6之前的)语法在我精简的应用程序中工作正常,然后在我的原始组件中也正常工作
<template slot="activator" slot-scope="{ on }">
因此,我意识到我的应用程序一定还在运行旧版本,即使我在完成npm更新后在Vui中使用了“构建”选项
我刚刚停止并重新启动了vue cli service service
命令(在UI中),现在一切正常
所以我猜我仍然在运行Vue v2.5.22,而VSCode的构建只是热加载了一些部分
因此,教训是:在执行npm更新后,关闭并重新启动所有内容,构建服务器、VSCode调试器、chrome实例。在我的例子中,我的构建链中有一个依赖项,它阻止了vue。
genActivator: function genActivator() {
if (!this.$slots.activator && !this.$scopedSlots.activator) return null;
<template slot="activator" slot-scope="{ on }">