js实现双向数据绑定

问题描述:js中的双向数据绑定是什么意思 大家好,本文将围绕js原生实现双向数据绑定展开说明,js实现双向数据绑定方式是一个很多人都想弄明白的事情,想搞清楚jquery实现数据双向绑定需要先了解以下几个事情。

vue.js2.0中怎么用prop实现双向绑定

js实现双向数据绑定的相关图片

双向数据绑定指的就是,绑定对象属性的改变到用户界面的变化的能力,反之亦然。换种说法,如果我们有一个user对象和一个name属性,一旦我们赋了一个新值给user.name,在UI上就会显示新的姓名了。同样地,如果UI包含了一个输入用户姓名的输入框,输入一个新值就应该会使user对象的name属性做出相应的改变。

详细的解释和例子可以看下这篇文章,http://www.php.cn/js-tutorial-4385.html,希望对你有帮助。

vue是怎么将数据绑定到组件的原理的相关图片

vue是怎么将数据绑定到组件的原理

子组件在props中定义数据,然后父组件传数据过去,例如:子组件:props:{show:{default:false}}父组件://test是子组件名字parentShow是父组件定义的data数据。

angularjs ng-model双向数据绑定怎么在展示页面的时候不显示的相关图片

angularjs ng-model双向数据绑定怎么在展示页面的时候不显示

vue将数据绑定到组件的原理如下:

1、当实例化一个Vue构造函数,会执行 Vue 的 init 方法,在 init 方法中主要执行三部分内容,一是初始化环境变量,而是处理 Vue 组件数据,三是解析挂载组件。以上三部分内容构成了 Vue 的整个执行过程。

2、Vue 实现了一个 观察者-消费者(订阅者) 模式来实现数据驱动视图。通过设定对象属性的 setter/getter 方法来监听数据的变化,而每个属性的 setter 方法就是一个观察者, 当属性变化将会向订阅者发送消息,从而驱动视图更新。

3、Vue 的订阅者 watcher 实现在 /src/watchr.js 。构建一个 watcher 最重要的是 expOrFn 和 cb 两个参数,cb 是订阅者收到消息后需要执行的回调,一般来说这个回调都是视图指令的更新方法,从而达到视图的更新,但是这也不是必须的,订阅回调也可以是一个和任何无关的纯函数。一个订阅者最重要的是要知道自己订阅了什么,watcher 分析 expOrFn 的 getter 方法,从而间接获得订阅的对象属性。

4、Vue 双向数据绑定实现

数据与视图的绑定与同步,最终体现在对数据的读写处理过程中,也就是 Object.defineProperty() 定义的数据 set、get 函数中。Vue 中对于的函数为 defineReactive,在精简版实现中,我只保留了一些基本特性:

function defineReactive(obj, key, value) {。

   var dep = new Dep()。

   Object.defineProperty(obj, key, {。

       enumerable: true,。

       configurable: true,。

       get: function reactiveGetter() {。

           if (Dep.target) {。

               dep.depend()。

           }

           return value。

       },

       set: function reactiveSetter(newVal) {。

           if (value === newVal) {。

               return。

           } else {。

               value = newVal。

               dep.notify()。

           }

       }

   })

在对数据进行读取时,如果当前有 Watcher(对数据的观察者吧,watcher 会负责将获取的新数据发送给视图),那将该 Watcher 绑定到当前的数据上(dep.depend(),dep 关联当前数据和所有的 watcher 的依赖关系),是一个检查并记录依赖的过程。而在对数据进行赋值时,如果数据发生改变,则通知所有的 watcher(借助 dep.notify())。这样,即便是我们手动改变了数据,框架也能够自动将数据同步到视图。

JS将数据绑定到页面中做成列表的相关图片

JS将数据绑定到页面中做成列表

贴出代码看看

以下是参照DEMO:

<!DOCTYPE html>。

<html>

<head lang="en">。

    <meta charset="UTF-8">。

    <title></title>。

    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>。

</head>

<body>

    <!--ng-model指令可以将输入域的值与AngularJS创建的变量绑定-->。

    <div data-ng-app="myApp" data-ng-controller="Ctrl">。

        名字:<input type="text" data-ng-model="name"/>。

    </div>。

    <script>。

        var app=angular.module('myApp',[]);。

        app.controller('Ctrl',function($scope){。

            $scope.name='John Doe';。

        })

    </script>。

    <hr/>。

    <!--双向绑定-->。

    <div id="dblBind" data-ng-app="dblBind" data-ng-controller="dblCtrl">。

        名字:<input type="text" data-ng-model="name"/>。

        <h1>你输入了:{{name}}</h1>。

    </div>。

    <script>。

        var dblBind=angular.module('dblBind',[]);。

        dblBind.controller('dblCtrl',function($scope){。

            $scope.name='John Doe';。

        })

        angular.bootstrap(document.getElementById('dblBind'),['dblBind']);。

    </script>。

    <hr/>。

    <!--验证用户输入-->。

    <form data-ng-app="myForm" name="myFormValid">。

        <!--注意ng-app的值与name值不能相同-->。

        Email:

        <input type="email" name="myEmail" data-ng-model="text"/>。

        <span data-ng-show="myFormValid.myEmail.$error.email">不是一个合法的邮箱地址</span>。

    </form>。

    <script>。

        var myFormApp=angular.module('myFormApp',[]);。

        angular.bootstrap(document.getElementsByName('myFormValid'),['myFormApp']);。

    </script>。

    <hr/>。

    <!--应用状态-->。

    <!--ng-model可以为应用程序提供状态值(valid,dirty,touched,error)-->。

    <form data-ng-app="myForm2" name="appStatus" data-ng-init="myText='test@163.com'">。

        <p>Email:。

            <input type="email" data-ng-model="myText" name="myEmail" required />。

        </p>。

        <h1>状态</h1>。

        <!--$valid ng-valid   Boolean 告诉我们这一项当前基于你设定的规则是否验证通过-->。

        <!--$invalid   ng-invalid Boolean 告诉我们这一项当前基于你设定的规则是否验证未通过-->。

        <!--$pristine  ng-pristine    Boolean 如果表单或者输入框没有使用则为True-->。

        <!--$dirty ng-dirty   Boolean 如果表单或者输入框有使用到则为True-->。

        is valid:{{appStatus.myEmail.$valid}}<br/>。

        is dirty:{{appStatus.myEmail.$dirty}}<br/>。

        is change:{{appStatus.myEmail.$touched}}<br/>。

        is invalid:{{appStatus.myEmail.$invalid}}<br/>。

        is pristine:{{appStatus.myEmail.$pristine}}<br/>。

        is error:{{appStatus.myEmail.$error}}。

    </form>。

    <script>。

        var appStatus=angular.module('appStatus',[]);。

        angular.bootstrap(document.getElementsByName('appStatus'),['appStatus']);。

    </script>。

    <hr/>。

    <!--ng-model指令基于他们的状态为HTML元素提供了CSS类-->。

    <style>。

        input.ng-invalid{。

            background-color: lightblue;。

        }

    </style>。

    <form data-ng-app="cssTestApp" name="cssTest">。

        输入你的名字:

        <input type="text" name="myName" data-ng-model="text" required />。

        is valid:{{cssTest.myName.$valid}}<br/>。

    </form>。

    <script>。

        var cssTestApp=angular.module('cssTestApp',[]);。

        angular.bootstrap(document.getElementsByName('cssTest'),['cssTestApp']);。

    </script>。

    <!--ng-model指令可根据表单域的状态添加/移除以下类-->。

    <!--ng-empty,ng-not-empty,ng-touched,ng-untouched,ng-valid,ng-invalid,ng-dirty,ng-pending,ng-pristine-->。

</body>

</html>

望采纳

结果:

代码如下:

<!DOCTYPE html>。

<html>

<head>

<meta charset="UTF-8">。

<title>Title</title>。

</head>

<body>

<table border="1";  style="width: 80%;  margin: auto;" id="user_table">。

<tr>

<th rowspan="2">姓名</th>。

<th rowspan="2">手机号码</th>。

<th rowspan="2">员工id</th>。

<th colspan="5">用户信息</th>。

</tr>

<tr>

<th>safemobile</th>。

<th>用户名</th>。

<th>gravatar</th>。

<th>skin_id</th>。

<th>email</th>。

</tr>

</table>

<script>

/**

* 练习将数据绑定到页面中

* userList是一个数组,里面有3个对象,每个对象中包含一些值,其中:

* nickname:字符串 姓名。

* user:对象 里面是用户信息,里面的htcode是用户名。

* telephone:字符串 电话号码。

*/

var userList = [{。

"nickname": "lizeze",。

"user": {"safemobile": "13000000000", "htcode": "lize123", "gravatar": null, "skin_id": null, "email": null},。

"telephone": "13000000000",。

"employee_id": "ba5bb7a8a15c11e986c00242c0a88003",。

}, {

"nickname": "\u7533\u5c0f\u4e3d",。

"user": {"safemobile": "13940000000", "htcode": "cloudass", "gravatar": null, "skin_id": null, "email": null},。

"telephone": "13940000000",。

"employee_id": "2fca26bca15a11e9a21f0242c0a88003",。

}, {

"nickname": "wym001",。

"user": {"safemobile": "17600000000", "htcode": "wym001", "gravatar": null, "skin_id": null, "email": null},。

"telephone": "17600000000",。

"employee_id": "0158b1069ca811e9be780242c0a88003",。

}];

var html='';

for (var user of userList){。

(function (user) {。

html += ' <tr>\n' +。

'            <td>'+user.nickname+'</td>\n' +。

'            <td>'+user.telephone+'</td>\n' +。

'            <td>'+user.employee_id+'</td>\n' +。

'            <td>'+user.user.safemobile+'</td>\n' +。

'            <td>'+user.user.htcode+'</td>\n' +。

'            <td>'+user.user.gravatar+'</td>\n' +。

'            <td>'+user.user.skin_id+'</td>\n' +。

'            <td>'+user.user.email+'</td>\n' +。

'        </tr>'。

})(user);

var table = document.getElementById("user_table");。

var srcHtml =  table.innerHTML ;。

table.innerHTML = srcHtml + html;。

</script>。

</body>

</html>

原文地址:http://www.qianchusai.com/js%E5%AE%9E%E7%8E%B0%E5%8F%8C%E5%90%91%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A.html

浦江镇世博家园十四街坊,浦江世博家园四街坊租房信息

浦江镇世博家园十四街坊,浦江世博家园四街坊租房信息

树莓派4b做AP,树莓派4B做nas速度能到多少

树莓派4b做AP,树莓派4B做nas速度能到多少

C8104,C8104几点钟到乌鲁木齐

C8104,C8104几点钟到乌鲁木齐

4454,445400是哪里的邮编

4454,445400是哪里的邮编

乐仔levi飞机视频哪里观看,乐仔levi飞机视频百度云资源

乐仔levi飞机视频哪里观看,乐仔levi飞机视频百度云资源

adopt,adoption翻译

adopt,adoption翻译

两位数除以一位数口算题,三年级两位数除以一位数口算题

两位数除以一位数口算题,三年级两位数除以一位数口算题

华南x99ad3鸡血bios分享,华南x99ad3主板怎么样

华南x99ad3鸡血bios分享,华南x99ad3主板怎么样

戌神沁音真人照片,戌神沁音转生前是谁

戌神沁音真人照片,戌神沁音转生前是谁

fake男版台词,男生版fake歌曲配词

fake男版台词,男生版fake歌曲配词

什么是ai辅写 中国知网期刊在线阅读 知网检索在线打印 知网个人查重机器 知网在线阅读要付费吗 论文在线阅读中国知网知网在线阅读收费 知网在线阅读app 知网查论文查论文在线查询 PaperBERT移除AI痕迹工具 知网阅读器推荐 ai辅写疑似度检测paperpass 本科文章查重会检测ai辅写疑似度吗 知网在线投稿平台 知网在线阅读收费吗 知网论文在线复制方法 知网免费在线 知网的文献管理工具 AI智能写作生成器 知网期刊在线阅读 知网app怎么在线阅读 文章ai辅写高风险怎么改 知网的在线阅读要多少钱 手机知网不能在线阅读吗 知网ai工具在哪里 觅知网图片在线编辑 中国知网免费入口在线阅读 学校知网在线阅读 论文查重工具知网 医师在线杂志知网可查吗