当前位置:首页>正文

AngularJS的数据双向绑定是怎么实现的 angular是怎么实现双向数据绑定

2023-04-27 01:07:18 互联网 未知

AngularJS的数据双向绑定是怎么实现的

AngularJS的数据双向绑定的实现思路:$scope变量中使用脏检测来实现了数据双向绑定。 

 Scope作用: 
1. 通过数据共享连接Controller和View 
2. 事件的监听和响应
3. 脏检测和数据绑定 双向数据绑定最经常的应用场景就是表单了,这样当用户在前端页面完成输入后,不用任何操作。
4. 在该作用域内可以做到数据和视图的相互绑定,同时又能与其他$scope对象的作用域隔离开来。 当然,$scope也可以实现继承, 在一个controller里面的作用域可以继承它上一级的scope这样就不是独立存在了。 

5. 核心angular代码:
.module(mymodule, [])
mymodule.controller(CartController, [$scope,
function CartController($scope) {
       // scope范围内的数据双向绑定
       $scope.items = [
           {name: "Angular应用", quantity: 1, price: 199.00},
           {name: "Angular入门", quantity: 1, price: 139.00},
           {name: "AngularJS权威教程", quantity: 2, price: 84.20}
       ]
      //直接绑定事件remove
       $scope.remove = function (index) {
           $scope.items.splice(index, 1)
       }
   }
])

angular是怎么实现双向数据绑定

angular并不存在定时脏检测。 angular对常用的dom事件,xhr事件等做了封装, 在里面触发进入angular的digest流程。 在digest流程里面, 会从rootscope开始遍历, 检查所有的watcher。

Angularjs 中数据双向绑定是怎么实现的?原理是什么

之前用artTemplate的时候,直接替换整个html会闪一下,所以自己搞了个数据绑定
主要思路我觉得就是在dom的属性上绑一些model的字段,如果model有变化,就去改变相应的model(整个很好做),然后更新dom。。
比如说

{{person.name}}

会被渲染成
{{person.name}}

那么如果person.name变化了,自然能够通过data-binding整个属性去改变div的值
反向的话,如果model更新,我觉得应该是事件触发的,比如说自带就有change,blur这些
我觉得关键是需要non-logic的模板引擎,否则在模板里加了逻辑。。整个就跪了,因为另一个逻辑分支的内容不会被渲染到dom里面,从而你如果model更新换了逻辑分支的话那就没办法了
{{if a}}
{{person.name}}

{{else}}
{{person.age}}

那么条件a变了,你也没法从age切到name

如何利用angular2双向数据绑定,绑定一个对象数组中的数据