热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从组件继承属性

不太确定我是否能从手册(或完全vue.js)中了解“非属性”:

不太确定我是否能从手册(或完全vue.js)中了解“非属性”:https://vuejs.org/v2/guide/components-props.html

说我有ChildComponent.vue文件:



然后我将其添加到ParentComponent中,如下所示:



该流应该是(并且是这样工作的)-在按下Enter键之后,写入ChildComponent中文本字段的任何内容都应一直发送到ParentComponent,因为parentvalueparentMethod()应该被调用。


  1. 如果我正确理解BasicComponent是其模板根组件的一种扩展,则意味着将不仅具有props类型和class set,而且还将placeholder(具有“ default”值)?


  2. 这是否也意味着分配了v-model数据的parentvalue道具也将传播到元素,使我的:valuev-on绑定冗余吗?


  3. 另一个问题-v-on="listeners"在没有指定事件的情况下如何工作,这是否意味着我在监听每个事件?
    在父组件中,有一个简写的@keydown.enter,表示它正在侦听keydown.enter事件,但是在listeners()方法中,我发出了一个input事件……


  4. 我也很难理解listeners()方法中发生的一切,因此,对破译它的任何帮助将不胜感激。 :D


预先感谢您的帮助。

欢呼


让我们一次做一个主题...

道具和非道具属性之间的区别:

道具是您在props对象中定义的参数。使用props,您可以告诉用户应该为给定prop使用什么类型,是否需要它们,默认值,分配验证功能等。

道具也是反应性的,因此,如果您的模板依赖于道具并且道具进行更新,那么模板也会如此。

您分配给组件的属性,但不与任何属性对应,将传递给$attrs变量。您可以使用它来访问这些值,例如$attrs.id获取ID,或$attrs.name获取名称,等等。

您所遇到的事件流:

是的,您在ChildComponent 上键入的内容已被传递给ParentComponent。它们通过您的v-model@keydown.enter="parentMethod"传递。

您可能知道事件的工作原理,但如果不行,那就是它的要旨:当您需要将数据从子组件传递到父组件时,您会在孩子中发出事件并在其中监听你的父母。

例如,如果要发出一个名为foo的事件,则可以使用$emit在孩子的某个地方调用$emit('foo')。然后,您可以通过向子级添加@foo="yourHandler"在父级中收听,其中yourHandler是为处理事件而编写的函数。这是您对@keydown.enter="parentMethod"所做的。

不仅会设置道具类型和类,还会设置占位符(具有“默认”值)?

答案:这取决于。模板中的标签将收到什么取决于您的根元素()是否继承组件属性。该行为由组件的inheritsAttrs属性定义,默认为true。

在您的情况下,这意味着,由于您未指定inheritsAttrs,因此它将默认为true,而,则传递给的每个属性都会被传递到您的标签,除了您手动定义的内容。

由于您这样声明标记,所以:


您的标记将继承 除外 typevalue和您的侦听器的所有属性(稍后会详细介绍)。该规则的例外是classstyle,它们始终被继承。

PS:请注意,typeclassplaceholder是属性,而不是道具。

这是否意味着分配了parentValue数据的v模型道具也将传播到元素,从而使我的:value和v-on绑定多余?

答案:不,但是它也不起作用。原因如下:

使用这段代码声明侦听器时:

listeners() {
return {
// Pass all component listeners directly to input
...this.$listeners,// Override input listener to work with v-model
input: event => this.$emit('input',event.target.value)
}
}

您要为放置在listeners标记上的每个事件侦听器(包括您的ChildComponent事件)分配给keydown计算属性,这就是它起作用的原因。

分配在这一行中完成:

...this.$listeners,

它使用传播运算符将$listeners变量(包含所有组件事件)中的所有元素添加到要返回的对象中。

您不继承的唯一事件是input,如以下行所示:

input: event => this.$emit('input',event.target.value)

在这一行中,您告诉代码input事件的行为将是您定义的行为,而不是继承的行为。

然后,当您将v-on="listeners"分配给输入时,就是告诉它侦听listeners变量中列出的每个事件。也就是说:您要将所有继承的事件和自定义input事件附加到输入事件。

最后,要解释为什么它不是多余的但为什么它不起作用,您必须了解v-model的工作方式。 (通常)通过侦听组件的input事件并使用它来更新同一组件的value属性来进行工作。所以在这一行:


您正在做两件事:


  • 您正在将parentValue的值分配给value的{​​{1}}道具

  • 您要告诉组件在调用ChildComponent事件时更新parentValue

这意味着为您的input标签分配一个值和侦听器不是多余的,因为您需要它来使input正常工作,但是最终将无法工作,因为您的组件没有v-model道具。它有一个value道具。

要解决此问题,您有两种选择:


  • childValue重命名为childValue

  • 或者告诉您的组件使用value作为模型

要执行第二种方法,只需将这段代码附加到您的childValue

ChildComponent

这将告诉您的组件使用该道具和该事件来使model: {
prop: 'childValue',event: 'input'
}
工作。

结束

最后的提示:将来,请尝试将问题缩小到单个主题。这样会更容易回答,并会帮助以后搜索这些主题的人。


推荐阅读
  • 一、路由首先需要配置路由,就是点击good组件进入goodDetail组件配置路由如下{path:goodDetail,component:goodDetail}同时在good组件中写入如下点击事件,路由中加入 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 详解react组件通讯方式(多种)
    这篇文章主要介绍了详解react组件通讯方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着 ... [详细]
  • 1、前端代码需要引入:element.min.cssvue.min.jselement.min.jsaxios.min.js  nuget里面可添加 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
author-avatar
qgd2013_184
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有