javascript - vue-material 组件的随机加载错误

标签 javascript vue.js vuejs2 vue-material

这周我开始使用 Vue.jsVueMaterial。这对我来说真的很有趣而且是全新的,因为我已经多年没有使用 Javascript(原生 Android 是我的菜)。

我目前遇到了一个非常奇怪的问题,我认为这与我对框架生命周期缺乏了解有关。

问题

  1. 我第一次在 Chrome 中手动加载/刷新项目时,由于某种原因加载 VueMaterial 组件失败,我收到以下消息:

    未知的自定义元素:md-toolbar - 您是否正确注册了该组件?对于递归组件,请确保提供“名称”选项。

我在项目中使用的每个 VueMaterial 组件(md-whiteframe、md-input-container 等)都会收到此消息。

结果如下: enter image description here

  1. 现在,如果我通过提供另一个组件(例如主页)的路径来专门更改 chrome 中的 URL,则某些组件会正确显示(由于某种原因工具栏除外)。

  2. 我返回(使用 Chrome)并登陆第一个组件,除了现在,一切都正确显示,除了工具栏(见下文)。

enter image description here

在某些情况下(非常罕见完全随机,工具栏会正确显示。

上下文

我通过 npm 安装了 vue-cli 并使用 webpack 模板构建了脚手架,然后也使用 npm 安装了 VueMaterial。

代码

下面是一些代码。

ma​​in.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>

登录.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 上找到,如果这能有所帮助的话。

非常感谢!

最佳答案

在创建 Vue.js 之后您将添加 VueMaterial 插件。而是在之前添加它。

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 }
})

关于javascript - vue-material 组件的随机加载错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43967565/

相关文章:

javascript - 附加到预先输入

Javascript OnClick 切换滚动

javascript - 当事件 $emit 发出时,Vue $on 不运行我的函数,即使我可以看到在 Vue 控制台中触发的事件

javascript - 如何在不更改 Vue 中的 url 的情况下返回 404 错误?

vue.js - Vue路由器别名优先级

javascript - 使用 bootstrap-vue 运行 jest

javascript - 为什么 Flash 播放器在设置其容器 div 的较大高度时会在 Firefox 中崩溃?

javascript - VueJS 从 Vuex 返回值不起作用

javascript - 实现Vue可拖动

javascript - 使用javascript获取url中的倒数第二个参数