zoukankan      html  css  js  c++  java
  • vue 实现父组件和子组件之间的数据双向绑定

    前言:vue 实现父组件给子组件传值,然后子组件可以修改回父组件的值。vue 的 prop 默认是单向数据绑定,但是偶尔需要双向绑定,这时就需要知道如何才能让子组件的数据修改时影响到父组件的数据。转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9304449.html

    网站地址:我的个人vue+element ui demo网站 

    github地址:yuleGH github (喜欢记得star哦)

      prop 默认是单向绑定:当父组件的属性变化时,将传导给子组件,但是反过来不会。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。不过,也可以使用 .sync 或 .once 绑定修饰符显式地强制双向或单次绑定。

      要点:

    1. 在子组件的 data 中创建一个props属性的副本

    2. watch props 中的属性 目的是为了同步父组件对 props 的修改

    3. watch 属性副本,emit一个函数通知到组件外,目的是为了同步子组件对属性的修改。这时利用了.sync,所以可以使用 this.$emit("update:name", newVal); 这种形式。

    直接上 Demo:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <c:set var="ctx" value="${pageContext.request.contextPath}"/>
    
    <html>
    
    <head>
        <title>测试</title>
    </head>
    <body>
    <div id="app">
        <input id="val1" v-model="value1">
        <button @click="clickBtn">点击打印</button>
        <component-input :name.sync="value1"></component-input>
    </div>
    <!-- 引入组件库 -->
    <script type="text/javascript" src="${ctx}/static/common/js/vue.js"></script>
    
    <script type="text/javascript">
        var componentInput = {
            template : "<div>子组件<input v-model='curName'></div>",
            data : function(){
                return {
                    curName : this.name
                }
            },
            props : ['name'],
            watch : {
                'name' : function(newVal, oldVal){
                    this.curName = newVal;
                },
                curName : function(newVal, oldVal){
                    this.$emit("update:name", newVal);
                }
            }
        };
    
        new Vue({
            el: "#app",
            data: {
                value1: ""
            },
            components : {
                'component-input' : componentInput
            },
            methods: {
                clickBtn: function () {
                    console.log(this.value1);
                }
            }
        });
    </script>
    
    </body>
    
    </html>

    转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9304449.html

  • 相关阅读:
    hadoop再次集群搭建(3)-如何选择相应的hadoop版本
    48. Rotate Image
    352. Data Stream as Disjoint Interval
    163. Missing Ranges
    228. Summary Ranges
    147. Insertion Sort List
    324. Wiggle Sort II
    215. Kth Largest Element in an Array
    快速排序
    280. Wiggle Sort
  • 原文地址:https://www.cnblogs.com/yuxiaole/p/9304449.html
Copyright © 2011-2022 走看看