自定义一个双向绑定组件

父组件:

<k-input v-model="model.username"></k-input>

子组件KInput:

<template>
    <div>
     <!--实现自定义组件双向绑定
      v-model是语法糖,实现自定义组件双绑定需要指定 :value和@input即可-->
      <input type="text" :value="value" @input="onInput">
    </div>
</template>

<script>
    export default {
        name: "KInput",
      props:{
          //传进来的value值,只显示不修改
          value:{
            type:String,
            default:‘‘
          },
      },
      methods: {
        onInput(e) {
          console.log(e)
          //派发事件,通知父组件输入值发生变化
          //将e.target.value赋值给username
          this.$emit(‘input‘,e.target.value)
         /* 在这里子组件通过方法onInput发射事件input,
            通过props接收父组件的传递给子组件的value值,
            父组件负责监听子组件的发射的事件input,得到的值value是第一个参数*/
        }
      },
    }
</script>

这样就可以实现自定义组件双向数据绑定了:

子组件通过监听input把最新的值e.target.value派出去,然后父组件通过v-model更新模型,模型更新也会导致传进来的props发生改变展示在子组件value上。

该过程是单向流的,因为<input type="text" :value="value" @input="onInput">只显示数据,没有修改数据。

原文地址:https://www.cnblogs.com/psxiao/p/11421057.html

时间: 2024-08-02 03:40:12

自定义一个双向绑定组件的相关文章

简单实现一个双向绑定

看了一些关于双向绑定的文章,现在来整理一下思路. 首先实现双向绑定有三个步骤: 需要一个方法来识别哪一个的view被绑定了相应的数据 需要监视数据和view的变化 需要将所有变化传播到绑定的对象和对应的view 为了解决第一个问题,要在对应的dom上添加相应的data-bind-<prop_name>属性,比如: num: <input type="number" data-bind-num> <div data-bind-num></div&

Angular数据双向绑定

Angular数据双向绑定 AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为核心的是:MVVM.模块化.自动化双向数据绑定.语义化标签.依赖注入等等. 一.什么是数据双向绑定 Angular实现了双向绑定机制.所谓的双向绑定,无非是从界面的操作能实时反映到数据,数据的变更能实时展现到界面. 一个最简单的示例就是这样: <div ng-control

剖析Vue原理&amp;实现双向绑定MVVM

剖析Vue原理&实现双向绑定MVVM vue.js 双向绑定 javascript 邓木琴居然被盗用了 2016年08月16日发布 推荐 24 推荐 收藏 195 收藏,10.6k 浏览 本文能帮你做什么?1.了解vue的双向数据绑定原理以及核心代码模块2.缓解好奇心的同时了解如何实现双向绑定为了便于说明原理与实现,本文相关代码主要摘自vue源码, 并进行了简化改造,相对较简陋,并未考虑到数组的处理.数据的循环依赖等,也难免存在一些问题,欢迎大家指正.不过这些并不会影响大家的阅读和理解,相信看完

angularjs系列之双向绑定

把之前学到ng的一些东西和大家分享一下.首先要讲的就是ng最重要的一个特性,双向绑定.(angular源码全部是1.5.0版本) 那么一个双向绑定的代码是什么样子.来看ng官网上的例子,代码就是这么简单. <script> angular.module('bindExample', []) .controller('ExampleController', ['$scope', function($scope) { $scope.test = 'Whirled'; $scope.testFn =

Angular系列----AngularJS入门教程05:双向绑定(转载)

在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f step-4 你应该发现除了搜索框之外,你的应用多了一个下来菜单,它可以允许控制电话排列的顺序. 步骤3和步骤4之间最重要的不同在下面列出.你可以在GitHub里看到完整的差别. 模板 app/index.html Search: <input ng-model="query"&g

[转载]AngularJS入门教程04:双向绑定

在这一步你会增加一个让用户控制手机列表显示顺序的特性.动态排序可以这样实现,添加一个新的模型属性,把它和迭代器集成起来,然后让数据绑定完成剩下的事情. 请重置工作目录: git checkout -f step-4 你应该发现除了搜索框之外,你的应用多了一个下来菜单,它可以允许控制电话排列的顺序. 步骤3和步骤4之间最重要的不同在下面列出.你可以在GitHub里看到完整的差别. 模板 app/index.html Search: <input ng-model="query"&g

简陋的双向绑定

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div id="app"> <input type="text" v-model="text&quo

ionic3.x 自定义组件component双向绑定之自定义计数器

本文主要示例在ionic3.x环境下实现一个自定义计数器,实现后最终效果如图: 1.使用命令创建一个component ionic g component CounterInput 类似的命令还有: ionic g page YourPageName //创建新页面 ionic g directive YourPageName //创建指令 ionic g component YourComponentName //创建组件 ionic g provider YourProviderName /

vue 自定义组件 v-model双向绑定、 父子组件同步通信

父子组件通信,都是单项的,很多时候需要双向通信.方法如下: 1.父组件使用:msg.sync="aa"  子组件使用$emit('update:msg', 'msg改变后的值xxx') 2.父组件传值直接传对象,子组件收到对象后可随意改变对象的属性,但不能改变对象本身. 3.父组件使用: v-model 第一种曾经被废除过,由于维护成本的原因被删掉,但经过证实,确实有存在的意义,又被加上. 第一种: 父组件: <template> <div> <aa cl