【问题标题】:Proper MaterializeCSS initialization in VueJS Project在 VueJS 项目中正确的 MaterializeCSS 初始化
【发布时间】:2018-06-29 17:24:42
【问题描述】:

我尝试在使用 npm (vue init webpack projectname) 创建的 VueJS 项目中初始化 MaterializeCSS 框架不使用 jQuery

1.0.0-rc.2版本开始,Materialize 支持自己的初始化,无需 jQuery,smth 像这样:

  document.addEventListener('DOMContentLoaded', function() {
    var elems = document.querySelectorAll('.collapsible');
    var instances = M.Collapsible.init(elems, options);
  });

但是通过这种方式,JS Materialize Components 只有在手册页之后才能工作 重新加载,当我打开一些组件并返回到具有 Materialize 内容的组件时 - 它不起作用 - 我需要一直手动重新加载页面。

那么如何正确的初始化JS组件呢?

【问题讨论】:

标签: vue.js materialize


【解决方案1】:

它对我有用,所以你可能想试试这个:

转到您的src/main.js 文件并添加以下行(如果假设您使用的是npm):

import 'materialize-css/dist/js/materialize.min'

我个人使用M.AutoInit()的方式在每个需要的vue组件上初始化JS组件:

<template>
  <div class="componentName">
    <!-- Some HTML content -->
  </div>
</template>


<script>
  export default {
    name: 'componentName',

    data() {
      return {
        // Some values
      };
    },

    mounted() {
      M.AutoInit(); // That way, it is only initialized when the component is mounted
    }
  }
</script>


<style scoped>
  /* Some CSS */
</style>

使用M.AutoInit()

document.addEventListener('DOMContentLoaded', function() {
    var elems = document.querySelectorAll('.collapsible');
    var instances = M.Collapsible.init(elems, options);
  });

在组件的mounted 函数内将导致它们仅在完全挂载时才被调用。

【讨论】:

  • 当我尝试使用v-ifv-else 构造时,为什么这个方法不起作用?例如,我从服务器获取数据并将我的可折叠放入 v-else 标记 - 以在可接收时显示一些可折叠的数据
  • v-if 和 v-else 从 DOM 中删除相关节点,因此它不会被挂载。 mounted 方法是在组件挂载到 DOM 时调用的,因此请尝试在 created 方法中调用您的初始化函数
猜你喜欢
  • 1970-01-01
  • 2021-06-09
  • 2018-09-25
  • 2017-03-13
  • 2012-08-09
  • 2020-10-07
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多