【问题标题】:Masonry is not a function砌体不是功能
【发布时间】:2016-12-28 21:26:09
【问题描述】:

我正在尝试在我的应用程序中使用砌体。以下是我的组件模板。

<template>
    <div>
        <section class="section">
            <div class="container">
                <div class="row team">
                    <div class="col-md-4 col-sm-6 member" v-for="team in teamMembers">
                        <div class="team__item">
                            <div class="team__info">
                                <h4>{{team.name}}</h4>
                                <small>{{team.title}}</small>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </section>
    </div>
</template>

<script src="https://unpkg.com/masonry-layout@4.1.1/dist/masonry.pkgd.min.js"></script>

<script>
    export default {
        data() {
            return {
                teamMembers: []
            }
        },
        mounted() {
            this.getTeamMembers();
        },
        methods : {
            getTeamMembers : function() {
                this.$http.get('teamMembers').then(response =>{
                    // console.log(response);
                    if(response.data.status=200) {
                        this.teamMembers = response.data.teamMembers;
                        this.$nextTick(function() {
                            var $container = $('.team');

                              $container.masonry({
                                columnWidth: '.member',
                                itemSelector: '.member'
                              }); 
                        })
                    }
                })
            }
        }
    }
</script>

每当呈现视图时,我都会收到以下错误。

TypeError: $container.masonry is not a function

你能告诉我我在这里做错了什么吗?

【问题讨论】:

  • 我不确定您是否可以在单个文件组件中包含类似的script。我认为您需要通过 npm 安装 masonary,然后在您的主 js 文件中要求它以授予 vue 访问它的权限。
  • 不能在单文件组件中间放置这样的脚本标签
  • 将您的脚本标签移动到 index.html 并尝试 window.$('.team')

标签: vue-component vue.js vuejs2


【解决方案1】:

你可以通过this.$el获取vue组件DOM元素。因此,您可以执行以下操作:

$(this.$el.querySelector('.team')).masonry({
                            columnWidth: '.member',
                            itemSelector: '.member'
                          }); 

但请记住,只要您的组件不是 Fragment Instance,即它只有一个根 HTML 标记,这是有效的。


您需要将以下脚本行放入 index.html 中,以便正确加载。

<script src="https://unpkg.com/masonry-layout@4.1.1/dist/masonry.pkgd.min.js"></script>

【讨论】:

  • 不,那不起作用..我遇到了同样的错误。而且我确实有一个根 html elem..
  • @Gagan 你确定this 的范围在你的this.$http.get 块内是正确的,检查这个answer
  • 是的 - 我有正确的 this 范围。我认为它找到了正确的元素,但是砌体没有正确加载,这就是我看到该错误的原因...
  • @Gagan 你能正确包含脚本文件吗:&lt;script src="https://unpkg.com ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多