【问题标题】:Materialize js doesn't work on first loadMaterialize js在第一次加载时不起作用
【发布时间】:2018-06-11 12:04:32
【问题描述】:

我正在尝试制作一个 Vue.js SPA 聊天应用程序,但我遇到了 Materialize CSS 和 JS 的问题。 JS 在第一次加载时不起作用,为了使其工作,我必须重新加载页面。不确定问题出在哪里,因为控制台中没有错误。

这里是 index.html:

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">

<title>Chat</title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
</body>
</html>

这是问题所在的组件:

 <template>
  <div class="container reg">
  <h1 class="text-centered">Registrace</h1>
 <form @submit.prevent="register">
   * Another form fields *
 <div class="input-field col s12">
  <select>
   <option value="" disabled selected>Choose your option</option>
   <option value="1">Option 1</option>
   <option value="2">Option 2</option>
   <option value="3">Option 3</option>
  </select>
  <label>Materialize Select</label>
 </div>
  <input type="submit" value="Registrovat" />
 </form>
 <router-link :to="{ name: 'login' }">
   <button>Login</button>
 </router-link>
</div>
</template>
<script>
 document.addEventListener('DOMContentLoaded', function() {
 var elems = document.querySelectorAll('select');
 var instances = M.FormSelect.init(elems, null);
  });
 export default {
    data: function () {
        return {

        };
    },
    methods: {
      Register () {
      }
    }
}
</script>

【问题讨论】:

    标签: javascript css vue.js materialize


    【解决方案1】:

    似乎使用外部 jQuery 库是 Vue.js 的反模式,因为

    Vue.js 和 jquery 就如何处理 DOM 发生争执。

    See the last comment here

    我认为你必须通过npm 安装它,然后在编译过程中手动插入cssjs,因为我在materialize 和ionic 3 上遇到了同样的问题。

    如果您不想花时间寻找解决方法来手动导入编译过程中的cssjs,最好使用对Vue 更友好的解决方案like this

    我修改了答案以添加另一个有用的链接。这个库使用 Materialize css 和 Vue.js 来构建 UI appcomponents.org

    【讨论】:

    • 我已经删除了 jQuery 库。我什至没有意识到它不应该与 Vue 结合使用。问题仍然存在。我想避免更改 CSS 框架,因为我需要重写很多 CSS,而最后期限是几天后。不过谢谢你的建议。
    • @Alorain - 查看最后的编辑。我已经在项目符号列表中添加了您正在等待的解决方案的答案。正如我认为你必须在 webpack 进程中添加 jQuery。
    • @Alorain - 如果你想我会编辑答案以更好地解释这一点:如果你只需要 Materialize css 文件而不是 js,你可以简单地添加它这样var Materialize=require('materialize-css')。但是,如果您需要 Materialize 库的所有 javascript 功能,我建议使用预构建的 Vue.js 库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多