[Vue warn]:$attrs 是只读的。 [Vue 警告]:$listeners 是只读的

2024-03-22

我对 Vuejs 比较陌生,每次按下按键时都会收到以下警告:

[Vue warn]: $attrs is readonly.

found in

---> <RouterLink>
       <HeaderComponent> at src\components\Header_Component.vue
         <App> at src\App.vue
           <Root>

and

[Vue warn]: $listeners is readonly.

found in

---> <RouterLink>
       <HeaderComponent> at src\components\Header_Component.vue
         <App> at src\App.vue
           <Root>

不过,这些警告似乎根本不影响可用性。我在任何地方都没有调用 $attrs 或 $listeners,我不确定这些警告来自哪里。

这是我的 Header_Component.vue:

<template>
    <header class="header">
        <div class='nav nav-side nav-oneLine'>
            <a class='nav-link' href='#'><router-link @click.native="addClass(), setLogoTrue('project')" to='/Projects'>PROJECTS</router-link></a>
            <a class='nav-link' href='#'><router-link @click.native="addClass(), setLogoTrue('blog')" to='/Blog'>BLOG</router-link></a>
            <a class='nav-link' href='#'><router-link @click.native="addClass(), setLogoTrue('aboutme')" to='/Aboutme'>ABOUT ME</router-link></a>
            <a class='nav-link' href='#'><router-link @click.native="addClass(), setLogoTrue('resume')" to='/Resume'>RESUME</router-link></a>
        </div>
    </header>
</template>

<script lang="ts">
import Vue from 'vue'

export default Vue.extend({
    data() {
        return{
            logoTrue: <Object> {
                'main': true,
                'project': false,
                'blog': false,
                'aboutme': false,
                'resume': false
            },
            main: <boolean>true,
            header: <any>"",
            image: <any>"",
            h1: <any>"",
            h2: <any>"",
            nav: <any>"",
            logos: <any>"",
            break: <any>"",
        }
    },
    components: {
        insta, facebook, github, codepen, mainLogo, mainLogoSmall, test, projectsLogo, blogsLogo, aboutmeLogo, resumeLogo
    }
    methods:{
        addClass(){
            if (document.querySelector('.h2Active') == null && document.querySelector('.header_top') == null) {
                this.add_newClasses()
                this.emit_finished(true)
                setTimeout(() => {
                    this.remove_separators()
                }, 800) 
            } else {
                console.log('classes already exist!')
                this.$emit('reloadBackToTop')
            }        
        },
        remove_separators() {
            let breaker = document.getElementsByClassName('separator')

            while (breaker[0]) {
                this.nav.removeChild(breaker[0])
            }
        },
        setLogoTrue(target) {
            for (var key in this.logoTrue) {
                if (this.logoTrue.hasOwnProperty(key)) {
                    if (key == target) {
                        this.logoTrue[key] = true
                    } else {
                        this.logoTrue[key] = false
                    }
                }
            }
        },
        apply_topClasses() {
            this.header.classList.add('header_top')
            this.image.classList.add('imgStatic_top')
            this.h1.classList.add('h1_name_top')
            this.h2.classList.add('h2_name_top')
            this.logos.classList.add('logo_links_top')
            this.nav.classList.add('nav-side_top')

            this.emit_finished(false)
        },
        add_newClasses() {
            if (window.innerWidth < 1060) {
                this.nav.classList.add('navActive_small')
                this.image.classList.add('imgActive_small')
            } else {
                this.nav.classList.add('navActive')
                this.image.classList.add('imgActive')
            }
            this.logos.classList.add('logo_linksActive')
            this.header.classList.add('headerActive')
            this.h1.classList.add('h1Active')
            this.h2.classList.add('h2Active')

            this.image.classList.remove('imgStatic')
        },
        emit_finished(delay:boolean) {
            if (delay) {
                setTimeout (() => {
                    this.$emit('finishedLoading')
                    console.log('finished_loading')
                }, 2000)
            } else {
                console.log('here')
                this.$emit('finishedLoading')
            }
        },
        adjust_clientWidth() {
            if (window.innerWidth < 1060) {
                // this.remove_separators()
                let bigActive = document.getElementsByClassName('big-nav')
                let navActive = document.getElementsByClassName('navActive')
                if (bigActive.length > 0) {
                    this.nav.classList.add('small-nav')
                    this.nav.classList.remove('big-nav')

                    this.image.classList.add('small-img')
                    this.image.classList.remove('big-img')

                } else if (navActive.length > 0) {
                    this.nav.classList.add('small-nav')
                    this.nav.classList.remove('nav-side')
                    this.nav.classList.remove('navActive')

                    this.image.classList.add('small-img')
                    this.image.classList.remove('imgActive')
                }
            } else {
                let smallActive = document.getElementsByClassName('small-nav')
                let smallnavActive = document.getElementsByClassName('navActive_small')
                if (smallActive.length > 0) {
                    this.nav.classList.add('big-nav')
                    this.nav.classList.remove('small-nav')

                    this.image.classList.add('big-img')
                    this.image.classList.remove('small-img')                     

                } else if (smallnavActive.length > 0) {
                    this.nav.classList.add('big-nav')
                    this.nav.classList.remove('nav-side')
                    this.nav.classList.remove('navActive_small')

                    this.image.classList.add('big-img')
                    this.image.classList.remove('imgActive_small')                    
                }
            }
        }
    },
    created: function() {
        window.addEventListener('resize',this.adjust_clientWidth)
    },
    mounted: function() {
        this.header = document.getElementsByClassName('header')[0]
        this.image = document.getElementsByClassName('img')[0]
        this.h1 = document.getElementsByClassName('h1_name')[0]
        this.h2 = document.getElementsByClassName('h2_name')[0]
        this.nav = document.getElementsByClassName('nav')[0]
        this.logos = document.getElementsByClassName('logo_links')[0]  

        if (window.location.hash != "#/") {
            this.remove_separators()
            if (window.location.hash == "#/Projects") {
                this.setLogoTrue('project')
            } else if (window.location.hash.includes("#/Blog") || window.location.hash.includes("#/blog")) {
                this.setLogoTrue('blog')
            } else if (window.location.hash == "#/Aboutme") {
                this.setLogoTrue('aboutme')
            } else if (window.location.hash == "#/Resume") {
                this.setLogoTrue('resume')
            }
            this.apply_topClasses()
        }
    }
})
</script>

<style lang="css" scoped>
(...)
</style>

感谢您的帮助!


正如您可能已经从另一个问题中弄清楚的那样,我在这里发布答案以节省其他人的时间。

此类错误的问题通常是因为您多次导入 Vue。首先在您的主应用程序中,然后也在您的组件文件中。 所以删除该行从“vue”导入 Vue从你的Header_Component.vue将解决该问题。 但是您必须将声明组件的方式更改为:

<script lang="ts">
//import Vue from 'vue' <-- Commented the import line

export default {  // <-- Removed Vue.extend()
    data() {
        return{
            logoTrue: <Object> {
                'main': true,
                'project': false,
                'blog': false,
                'aboutme': false,
                'resume': false
            },
            main: <boolean>true,
            header: <any>"",
            image: <any>"",
            h1: <any>"",
            h2: <any>"",
            nav: <any>"",
            logos: <any>"",
            break: <any>"",
        }
    }
    ...more code...
}
</script>

Here https://v2.vuejs.org/v2/guide/single-file-components.html更多的是关于单个文件组件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Vue warn]:$attrs 是只读的。 [Vue 警告]:$listeners 是只读的 的相关文章

  • 修复 JSLint“意外的‘this’。”错误?

    我试图让以下代码成为符合 jslint 标准 http jslint com 但我陷入以下两个错误 本来应该看到一个声明 结果却看到了一个块 and 意想不到的 这个 我应该对我的代码进行哪些更改才能使 JSLint 满意 var pvAc
  • 查找并删除 Javascript 对象数组中的第一个匹配元素

    假设我有一个数组 members name Anna class one name Bob class two name Chuck class two removed members myRemoveByClass two somethi
  • Angular JS - 提交到 $http 时日期发生变化 - 时区问题

    我遇到一个奇怪的问题Date当它通过 http put 传递到 API 时发生变化 我怀疑时区问题 Datepicker 触发 ng change 事件 console log Tue Jun 10 2014 00 00 00 GMT 01
  • Cypress:在 JSON 响应中存根特定键

    我想在 Cypress 中存根以下响应 专门存根密钥ds version 可能的值为 0 1 或 2 每个值将在 UI 上显示不同的元素 fixtures user json email email protected cdn cgi l
  • Iphone 上的 Javascript 日期解析

    我正在开发一个针对移动设备的离线 Javascript 网站 iPhone 就是这样的一种移动设备 我正在尝试从 REST API JSON 对象的成员 解析日期 我在用着 Date parse 2010 03 15 10 30 00 这适
  • 如何使用 LeafLe 创建商店地图

    我希望创建一个可以交互的地图 我发现的最好的选择是传单 问题是我没有找到任何资源来解释如何创建自己的地图 我希望创建一个商场地图 用户可以在其中看到所有商店 喷泉 我怎样才能做到这一点 最好的起点是传单示例页面 http leafletjs
  • 为什么 foo.hasOwnProperty('__proto__') 等于 false?

    var foo bar 5 Why is foo hasOwnProperty proto 等于false 它不能来自原型链中更高层的任何对象 因为它是特定于这个对象的 EDIT 有些答案说它已开启Object prototype 但我不明
  • 在气球内显示带有照片的多个地标的最佳做法是什么?

    我有一个项目如下 从手机上拍摄几张照片 将照片保存在网络系统中 然后将照片显示在其中的谷歌地球上 我读过很多文章 但它们都使用 fetchKml 我读过的一篇好文章是使用 php 但使用 fetchKml 我不知道是否可以使用 parseK
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • Antd 选择搜索框未呈现匹配项

    我有产品数据 我正在使用搜索值过滤数据 然后使用过滤后的数据呈现选项 产品数据作为道具来自全局 redux 存储 由于某种原因 下拉列表仅在搜索值为空时显示数据 当我开始输入时 filteredData已更新 组件也重新渲染 但选项不显示任
  • Javascript - 对父母调用 super 父母?

    我在 Odoo 中定义了当前自定义 javascript 视图的扩展 openerp account move journal test function instance var t instance web t lt instance
  • 无法安装js-bson

    我正在使用Windows 7 64位 尝试安装bson作为mongodb的依赖项 我收到此错误 npm WARN package json email protected cdn cgi l email protection No READ
  • 使用 Google 地图 API 进行反向地理编码

    我正在研究 JavaScript Google Map API 版本 3 更准确地说 正在研究反向地理定位 在 的帮助下官方文档 http code google com intl fr apis maps documentation ge
  • Angular - 将焦点放在动态创建的输入字段上

    我如何将焦点添加到新创建的字段 参见到目前为止的示例 http jsfiddle net aERwc 165 http jsfiddle net aERwc 165 scope addField function console log h
  • 如何制作实时jquery效果?

    我想制作一个实时提要阅读器 并且我想要一个解决方案 使新项目无需刷新页面即可出现 并且具有像friendfeed一样的滚动效果 你可以在这里看到我在说什么 http www vimeo com 4029954 http www vimeo
  • jQuery clone() 复制数据...有时...?

    使用下面的示例 我有一个tr我正在复制 它包含一个 jQueryautocomplete 第一次克隆时 自动完成功能不起作用 因为附加的data items 一片空白 第二次单击 添加 按钮时 自动完成功能将起作用 此后 再次单击 添加 会
  • JQuery 屏蔽输入插件不起作用

    我已将 JQuery Masked 输入插件添加到我的 Web 项目中 但它根本不起作用 该插件可以在这里找到 http digitalbush com projects masked input plugin http digitalbu
  • 为什么 [].push([]) 返回 1? [复制]

    这个问题在这里已经有答案了 为什么这会返回 1 push outputs 1 push 返回数组的新长度 one push two returns 2 array length is 2 one two push something ret
  • 将响应式网格布局转换为 Plotly Dash

    我是一个非常活跃的 Dash 用户 我开始发现 Dash 使用中存在很多限制 并且我意识到有关如何将组件转换为 Dash 的信息 内容绝对有限 并且示例过时且非常简单 并且我对 Javascript 或 React 几乎没有任何了解 我完全
  • 类型错误:无法读取未定义的属性“长度” - 使用安全帽部署时

    我在尝试在安全帽开发链上部署模拟合约时收到以下错误 我正在关注 使用 JavaScript 学习区块链 Solidity 和全栈 Web3 开发 Patrick Collins 在 FreeCodeCamp YT 频道上的 32 小时课程

随机推荐

  • 使用 PHP 和 PHPWord 将 HTML 代码转换为文档

    我正在使用 PHPWord 加载 docx 模板并替换标签 例如 test 这工作得很好 但我想用 html 代码替换一个值 直接将其替换到模板中是不可能的 据我所知 现在有办法使用 PHPWord 来做到这一点 我查看了 htmltodo
  • 如何从 PowerShell 1.0 调用 DLL 方法 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我使用 PowerShell 1 0 版脚本从 DLL 文件调用方法 并使用以下代码将 DLL 文件加载到 PowerShell 中 Sys
  • 这是真实的约会吗

    PHP 是否有一个函数可以帮助确定日期是否是真实日期 例如February 29 2011不是真实的 因为今年2月只有28天 这就是我要问的那种 真实约会 PHP 有什么可以帮助的吗 您想使用检查日期 http php net manual
  • Codebhind javascript 警报“是”和“否”无法正常工作

    我已经写了 是 和 否 的确认消息 这是代码 function myTestFunction if confirm Are you sure you want to override the file return true else re
  • 透明 jQuery UI 对话框

    有人知道如何使 ui 对话框透明吗 创建一个类 transparent class filter alpha opacity 50 for IE4 IE7 ms filter progid DXImageTransform Microsof
  • 如何在 HTML 中制作选项卡式视图?

    单击选项卡 A 时 显示选项卡 A 的内容 单击选项卡 B 时 显示选项卡 B 的内容 依此类推 构建 HTML 片段最简单且兼容的方法是什么 我不想在这里使用任何库 所以没有jQuery http en wikipedia org wik
  • 使用 glTexImage2D 的奇怪结果

    我一直在试图弄清楚如何glTexImage2D有效 并且从一些非常清晰的代码中看到一些奇怪的结果 我的代码只是将一个粗略的圆绘制到一个 256 256 长度的无符号数组中 然后将该数据发送出去以成为纹理 然而 无论我在图像创建循环中选择什么
  • 根据时间在 perl 脚本中运行子程序?

    我有一个 perl 脚本 它作为守护进程一直循环运行 我想在基于时间 或计时器 的 perl 脚本中运行一个子函数 因此每 2 小时它将运行该子函数并继续其循环 我正在考虑获取纪元时间 然后通过循环检查几次 一旦它大于 2 小时 它就会运行
  • 仅当 EntityCollection 或 EntityReference 不包含对象时才能调用 Load

    正如标题所示 当我使用实体框架 4 1 的延迟加载来关闭跟踪时 我收到了错误 完整的异常消息 当使用 NoTracking 合并选项返回对象时 仅当 EntityCollection 或 EntityReference 不包含对象时才能调用
  • Joda 时间 两个日期之间的时间间隔(包括时区)

    我使用 JodaTime 库进行时间操作 我有两个日期 日期一 DateTime time server new DateTime server time milisecs withZone DateTimeZone forID Europ
  • Devise 令牌身份验证错误:未设置 Devise.secret_key

    我目前正在使用 Devise 令牌身份验证 https github com lynndylanhurley devise token auth https github com lynndylanhurley devise token a
  • 如何隐藏“网络”选项卡中的请求

    如何在浏览器开发者工具的网络选项卡中隐藏 api 服务请求 任何建议 尽管我强烈建议不要这样做 因为它不会阻止任何认真的用户 但是可以通过 flash 或任何其他具有此类功能的插件来发送它 实现这一目标的最简单方法是使用启用 Flash 的
  • Paramiko - 在“后台”运行命令

    我已经使用 exec command 成功实现了 Paramiko 但是 我在远程计算机上运行的命令有时可能需要几分钟才能完成 在此期间 我的 Python 脚本必须等待远程命令完成并接收标准输出 我的目标是让远程机器 在后台运行 并允许本
  • Angular 下载大 blob

    我有一个类似的问题this one https stackoverflow com questions 46932213 how to download large file with javascript我成功下载了通过 HTTP GET
  • Objective-C:Unicode 日期格式

    我正在尝试找出如何使用 UNICODE 表示 Sun 03 May 2009 19 58 58 0700 as eee dd MMM yyyy HH mm s ZZZZ 或其他 我似乎无法让它精确地工作 Use an NSDateForma
  • 字符编码问题?

    在我的 mysql 数据库中 页面名称字段中有以下信息 如果我执行 phpmyadmin 转储 则会导出以上内容 我正在使用不同的 php 脚本 而不是上面的脚本 我得到的是这个 这是生成输出的片段 data sql SELECT FROM
  • SQL 存储过程 - 从多个数据库执行

    我的公司使用来自许多客户的数据 并且忽略了记录我们数据库的表和字段所代表的内容 为了帮助解决这个问题 我编写了一些存储过程 这些过程似乎只适用于它们所在的数据库 我希望服务器上有一个存储过程实例 可以在其所有数据库上使用 但不知道如何实现这
  • 在 Idea 中查找对某个对象的所有引用

    Intellij IDEA IDE 是否有快捷键或选项来查找对某个文件的所有引用Class在一个特定的项目中 例如 我创建了自己的Class持有一个String and an int我已经通过该项目进行了参考 该项目相当大 我不想手动搜索每
  • 有没有办法将 python 应用程序编译成静态二进制文件?

    我想做的是将我的代码发送到远程服务器 该服务器可能安装了不同的 python 版本和 或可能没有我的应用程序所需的包 现在为了实现这种可移植性 我必须使用解释器和代码构建可重定位的 virtualenv 这种方法有一些问题 例如 您必须手动
  • [Vue warn]:$attrs 是只读的。 [Vue 警告]:$listeners 是只读的

    我对 Vuejs 比较陌生 每次按下按键时都会收到以下警告 Vue warn attrs is readonly found in gt