VueJS - 从materializecss触发模态

时间:2017-03-03 07:53:17

标签: materialize vuejs2

我试图在VueJS实例中触发materializecss框架中的模态。

${filename:toDate("'file_'yyyy-MM-dd'T'HHmmss'.csv'", "UTC"):toNumber()}VueJS都是正确的。他们自己的两个框架都运行良好。

单击打开按钮会导致错误:

  

未捕获TypeError:data [option]不是函数       在HTMLDivElement。 (adminarea.js:24562)       在Function.each(adminarea.js:10567)       在jQuery.fn.init.each(adminarea.js:10356)       在jQuery.fn.init.Plugin [作为模态](adminarea.js:24556)       在Vue $ 3.showLoader(adminarea.js:21396)       在boundFn(adminarea.js:54956)       在HTMLButtonElement.invoker(adminarea.js:56467)

这是我的Vue-Instance:

Materializecss

这是我的html文件中具有模态结构的部分:

const app = new Vue({
    el: '#app',
    data: {
        activeUser: {
            username: '',
            email: ''
        },
    },
    methods: {
        showLoader(){
            $('#loaderModal').modal('open');
        },
        closeLoader(){
            $('#loaderModal').modal('close');
        }
    },
    mounted() {
        // Get current User
        axios.get('/api/currentUser')
            .then(response => {
                this.activeUser.username = response.data.username;
                this.activeUser.email = response.data.email;
            });
    },
    components: {
        Admindashboard
    }
});

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:0)

根据建议here,您需要在已安装的块中添加以下代码:

mounted() {
    $('#loaderModal').modal();  //New line to be added
    // Get current User
    axios.get('/api/currentUser')
        .then(response => {
            this.activeUser.username = response.data.username;
            this.activeUser.email = response.data.email;
        });
},

答案 1 :(得分:0)

我似乎找到了解决方案:

很高兴知道Laravel用户:对于我目前的项目,我使用Laravel 5.5和Materialisecss,VueJS和VueRouter,但我认为解决方案是通用的。 Materializecss是通过npm安装的,必须包含在您的应用程序中。我在ressources/assets/js/bootstrap.js

中需要css框架
...// more code
try {
    window.$ = window.jQuery = require('jquery');
    window.materialize = require('materialize-css');
} catch (e) {
    console.log(e);
}
...// more code

现在你必须在你的包装Vue-instance的挂载事件上初始化模态函数:

const app = new Vue({
    router,
    data: {
        ...
    },
    methods: {
        testClick: function(){
            console.log('Testklick-Call');
            $('#modal1').modal('open');
        }
    },
    mounted: function(){
        console.log('Instance mounted');
        $('.modal').modal();
    }
}).$mount('#app');

上面的代码放在我的ressources/assets/js/app.js中,默认情况下由Laravel Mix打包,但我认为这是通用的,也可以在没有Laravel Mix / Webpack等的情况下使用。

现在,您可以从任何地方以编程方式调用每个模态。我在一个点击事件的主实例中测试了它。函数放在我的Vue实例中(见上文)。 HTML代码见下文:

<button v-on:click="testClick">Open Modal</button>

但您也可以使用已安装函数中的模态或任何组件的任何其他函数:

<template>
    <div>
        <p>I am an component!</p>
    </div>
</template>

<script>
    export default {
        mounted() {
            console.log('Component mounted!');
            $('#modal1').modal('open');
        }
    }
</script>

如果组件在单击链接后(仅使用VueRouter)可见,则此方法也有效。

希望这可以帮助除了我以外的人:)