vue-material 组件的随机加载错误
Random loading errors with vue-material components
这周我开始玩 Vue.js 和 VueMaterial。这对我来说真的很有趣,而且是全新的,因为我已经 Javascript 多年了(原生 Android 是我的菜)。
我目前遇到一个非常奇怪的问题,我想说这与我对框架生命周期缺乏了解有关。
问题
我第一次loading/refreshing手动Chrome中的项目,由于某种原因加载VueMaterial组件失败,我得到以下消息:
未知自定义元素:md-toolbar - 您是否正确注册了组件?对于递归组件,请确保提供 "name" 选项。
我在项目中使用的每个 VueMaterial 组件(md-whiteframe、md-input-container 等)都会收到此消息。
结果如下:
现在,如果我通过给出另一个组件(例如 Home)的路径来专门更改 chrome 中的 URL,那么某些组件会正确显示(工具栏除外)出于某种原因)。
我返回(使用 Chrome),并登陆第一个组件,除了现在,一切都正确显示,除了工具栏(见下文)。
在某些情况下(确实罕见和完全随机,工具栏显示正确。
上下文
我通过 npm 安装了 vue-cli 并使用 webpack 模板构建了脚手架,然后也使用 npm 安装了 VueMaterial。
代码
下面是一些代码。
main.js
import Vue from 'vue'
import App from './App'
import router from './router'
import VueMaterial from 'vue-material'
import 'vue-material/dist/vue-material.css'
Vue.config.productionTip = false
let colorPrimary = {
color: 'red',
hue: 700,
hexa: '#D32F2F'
}
let colorAccent = {
color: 'yellow',
hue: 600,
hexa: '#FDD835'
}
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
Vue.use(VueMaterial)
Vue.material.registerTheme('default', {
primary: colorPrimary,
accent: colorAccent,
warn: colorPrimary,
background: 'white'
})
Vue.material.setCurrentTheme('default')
App.vue
<template>
<div id="app">
<toolbar></toolbar>
<router-view></router-view>
</div>
</template>
<script>
import Toolbar from './components/Toolbar';
export default {
components: {
Toolbar
},
name: 'app'
}
</script>
<style src="./styles/general.css"></style>
Toolbar.vue(自定义组件)
<template>
<div id="toolbar">
<md-toolbar class="md-primary">
<h2 class="md-title" style="flex: 1">Firebucket</h2>
</md-toolbar>
</div>
</template>
<script>
export default {
name: 'toolbar'
}
</script>
<style scoped src="../styles/toolbar.css"></style>
Login.vue
<template>
<div id="login" class="bg-primary">
<md-whiteframe md-elevation="2" id="login-form">
<span class="md-title text-primary">{{wording.login}}</span>
<md-input-container>
<label>{{wording.username}}</label>
<md-input></md-input>
</md-input-container>
<md-input-container>
<label>{{wording.password}}</label>
<md-input></md-input>
</md-input-container>
<router-link id="login-button" tag="md-button" to="XX" class="md-raised md-primary">{{wording.login}}</router-link>
<br />
<md-button class="md-primary">{{wording.createAccount}}</md-button>
</md-whiteframe>
</div>
</template>
<script>
export default {
name: 'login',
data () {
return {
wording: {
login: 'Login',
createAccount: 'Create an account',
username: 'Username',
password: 'Password'
}
}
}
}
</script>
<style scoped src="../styles/login.css"></style>
router.js
import Vue from 'vue'
import Router from 'vue-router'
import Login from './pages/Login'
import Home from './pages/Home'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/home',
name: 'home',
component: Home
},
{
alias: '/',
path: '/login',
name: 'login',
component: Login
}
]
})
--
同样,Web 开发不是我的专长,我听说过很多关于 Vue.js 的好消息,所以我想试一试。但是很抱歉,如果我遗漏了一些非常明显的东西。
我真的无法接受这样一个事实,即它第一次无法正常工作,但当我回去时工作正常...
PS:router-link(在Login.vue中)也不起作用,当我点击按钮时没有任何反应,但我想那是另一个问题。
有人知道吗?非常欢迎对上面发布的代码提供一般反馈,以便我对其进行改进。
代码可在 GitHub 上找到,如果有帮助的话。
非常感谢!
您正在添加 VueMaterial 插件在您创建 Vue 之后。相反,在之前添加它。
Vue.use(VueMaterial)
Vue.material.registerTheme('default', {
primary: colorPrimary,
accent: colorAccent,
warn: colorPrimary,
background: 'white'
})
Vue.material.setCurrentTheme('default')
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
这周我开始玩 Vue.js 和 VueMaterial。这对我来说真的很有趣,而且是全新的,因为我已经 Javascript 多年了(原生 Android 是我的菜)。
我目前遇到一个非常奇怪的问题,我想说这与我对框架生命周期缺乏了解有关。
问题
我第一次loading/refreshing手动Chrome中的项目,由于某种原因加载VueMaterial组件失败,我得到以下消息:
未知自定义元素:md-toolbar - 您是否正确注册了组件?对于递归组件,请确保提供 "name" 选项。
我在项目中使用的每个 VueMaterial 组件(md-whiteframe、md-input-container 等)都会收到此消息。
结果如下:
现在,如果我通过给出另一个组件(例如 Home)的路径来专门更改 chrome 中的 URL,那么某些组件会正确显示(工具栏除外)出于某种原因)。
我返回(使用 Chrome),并登陆第一个组件,除了现在,一切都正确显示,除了工具栏(见下文)。
在某些情况下(确实罕见和完全随机,工具栏显示正确。
上下文
我通过 npm 安装了 vue-cli 并使用 webpack 模板构建了脚手架,然后也使用 npm 安装了 VueMaterial。
代码
下面是一些代码。
main.js
import Vue from 'vue'
import App from './App'
import router from './router'
import VueMaterial from 'vue-material'
import 'vue-material/dist/vue-material.css'
Vue.config.productionTip = false
let colorPrimary = {
color: 'red',
hue: 700,
hexa: '#D32F2F'
}
let colorAccent = {
color: 'yellow',
hue: 600,
hexa: '#FDD835'
}
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})
Vue.use(VueMaterial)
Vue.material.registerTheme('default', {
primary: colorPrimary,
accent: colorAccent,
warn: colorPrimary,
background: 'white'
})
Vue.material.setCurrentTheme('default')
App.vue
<template>
<div id="app">
<toolbar></toolbar>
<router-view></router-view>
</div>
</template>
<script>
import Toolbar from './components/Toolbar';
export default {
components: {
Toolbar
},
name: 'app'
}
</script>
<style src="./styles/general.css"></style>
Toolbar.vue(自定义组件)
<template>
<div id="toolbar">
<md-toolbar class="md-primary">
<h2 class="md-title" style="flex: 1">Firebucket</h2>
</md-toolbar>
</div>
</template>
<script>
export default {
name: 'toolbar'
}
</script>
<style scoped src="../styles/toolbar.css"></style>
Login.vue
<template>
<div id="login" class="bg-primary">
<md-whiteframe md-elevation="2" id="login-form">
<span class="md-title text-primary">{{wording.login}}</span>
<md-input-container>
<label>{{wording.username}}</label>
<md-input></md-input>
</md-input-container>
<md-input-container>
<label>{{wording.password}}</label>
<md-input></md-input>
</md-input-container>
<router-link id="login-button" tag="md-button" to="XX" class="md-raised md-primary">{{wording.login}}</router-link>
<br />
<md-button class="md-primary">{{wording.createAccount}}</md-button>
</md-whiteframe>
</div>
</template>
<script>
export default {
name: 'login',
data () {
return {
wording: {
login: 'Login',
createAccount: 'Create an account',
username: 'Username',
password: 'Password'
}
}
}
}
</script>
<style scoped src="../styles/login.css"></style>
router.js
import Vue from 'vue'
import Router from 'vue-router'
import Login from './pages/Login'
import Home from './pages/Home'
Vue.use(Router)
export default new Router({
routes: [
{
path: '/home',
name: 'home',
component: Home
},
{
alias: '/',
path: '/login',
name: 'login',
component: Login
}
]
})
--
同样,Web 开发不是我的专长,我听说过很多关于 Vue.js 的好消息,所以我想试一试。但是很抱歉,如果我遗漏了一些非常明显的东西。
我真的无法接受这样一个事实,即它第一次无法正常工作,但当我回去时工作正常...
PS:router-link(在Login.vue中)也不起作用,当我点击按钮时没有任何反应,但我想那是另一个问题。
有人知道吗?非常欢迎对上面发布的代码提供一般反馈,以便我对其进行改进。
代码可在 GitHub 上找到,如果有帮助的话。
非常感谢!
您正在添加 VueMaterial 插件在您创建 Vue 之后。相反,在之前添加它。
Vue.use(VueMaterial)
Vue.material.registerTheme('default', {
primary: colorPrimary,
accent: colorAccent,
warn: colorPrimary,
background: 'white'
})
Vue.material.setCurrentTheme('default')
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})