[英]Vue.js 2.0 - creating reusable components
我正在尝试使用Vue.js 2和单个文件组件创建完全可重用的组件,而现在我的方法似乎无法实现。
目标是创建用于为复杂的嵌套JSON结构创建表单的组件。 该结构应该被编辑然后发送到服务器。 组件本身会显示标题和提交按钮,但是字段及其放置位置完全由我的组件用户负责。 (前端工程师)
MyForm组件(此处与实现无关)传递了JSON数据和url,以将其发布到。
该表单应该可以被许多其他用户重用,并且表单本身的内容应该是不相关的。 它可能混合了html / inputs / custom组件作为子组件。
让我们想象一个简单的场景,其中没有数据嵌套以下数据:
var mymodel={ name : "My name", surname : "My surname" }
我想使用组件创建一个表单:
<MyForm :model="mymodel" :url="http://localhost/post">
<div>
<MyTextInput v-model="model.name" label="Name"/>
<MyPanel>
<MyTextInput v-model="model.surname" label="Surname"/>
</MyPanel>
</div>
</MyForm>
因此:
如我们所见,传递变量和组合本身存在很多问题:
组成:
MyForm
的模板中放置一个<slot></slot>
来显示字段,它将在父范围内进行编译,因此所有子级(包括MyTextField)都无法访问“模型” <MyForm inline-template>
,则由于所有内容均已替换,因此无法自动显示表单页眉和页脚。 另外,当使用单个文件组件时,编译器将在inline-template
查找所有组件,这意味着我将不得不将MyTextInput
和MyPanel
导入MyForm
,这是不实际的。 我事先不知道永远不会以我的形式出现的所有组件! 传递变量:
MyTextInput
模型传递给MyPanel
就无法将模型传递给第二个MyTextInput
。 实际上,我将不得不将其传递给介于两者之间的每个自定义组件。 而且我事先也不知道会有多少个自定义组件。 这意味着我将不得不修改将要放入MyForm
的每个组件的代码,并要求用户传递其包括的每个自定义组件的数据。 MyForm
。 正如我所说的,该组件应该简单易用。 要求该组件的用户修改他们放入的每个子代的代码,并要求他们在内部的每个组件上添加v-on:似乎不切实际。
使用Vue.js 2.0是否可以解决我的想法? 我之前为AngularJS(1.5)设计了相同的组件,并且运行良好,不需要对表单的每个子项进行修改。
我一直在使用基于vue 2.0的ui框架,您可能会从其实现中获得一些想法。 基于它的实现和我很少的经验,我认为是由您的框架负责组装表单模型的人。 同样,对于表单,我们总是可以在不使用v-model
的帮助下,通过使用字段的value
属性轻松获得要发送的所有数据。
该框架的有关表单元素的文档也可能会有所帮助,但除代码示例外,目前仅提供中文版本。
我建议您使用带有自定义事件的表单输入组件来在表单中传递变量。
现在将局部更改prop视为反模式,例如,声明prop a然后设置this.a =组件中的someOtherValue。 由于采用了新的渲染机制,每当父组件重新渲染时,子组件的本地更改都将被覆盖。 通常,在2.0中,您应该将道具视为不可变的。 改变道具的大多数用例可以用数据属性或计算属性代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.