使用vue-material组件随机加载错误

时间:2017-05-14 18:40:20

标签: javascript vue.js vuejs2 vue-material

本周我开始玩 Vue.js VueMaterial 。这对我来说真的很有趣而且全新,因为我多年没有做Javascript(Native Android 是我的一杯茶)。

我目前遇到一个非常奇怪的问题,我会说这与我在框架生命周期中缺乏知识有关。

问题

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

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

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

    结果如下: enter image description here

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

    2. 我回去(使用Chrome),然后登陆第一个组件,除了现在,所有内容都正确显示,但工具栏除外(见下文)。

    3. enter image description here

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

      上下文

      我通过npm安装了vue-cli并使用webpack模板构建了scaffold,然后安装了带有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
          }
        ]
      })
      

      -

      同样,网页开发不是我的事情,我听说Vue.js有很多好处,所以我想尝试一下。但对不起,如果我遗漏了一些非常明显的事情。

      我真的无法理解这样一个事实:它不是第一次工作但是当我回去时工作正常......

      PS:路由器链接(在Login.vue中)也不起作用,当我点击按钮时没有任何反应,但我想这是一个不同的问题。

      任何人都有意见吗?关于上面发布的代码的一般反馈非常受欢迎,所以我可以改进它。

      该代码可在GitHub上找到,如果可以提供帮助的话。

      非常感谢!

1 个答案:

答案 0 :(得分:0)

您在创建Vue后添加了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 }
})