浅谈AngularJs 双向绑定原理(数据绑定机制)

浅谈AngularJs 双向绑定原理(数据绑定机制)

什么是双向绑定

双向绑定指的是将视图和模型之间的数据绑定在一起,使得当视图的数据发生变化时,模型中的数据也会自动更新;同样,当模型中的数据被修改时,视图中的数据也会跟着改变。这种机制可以减轻开发人员的负担,提高开发效率。

AngularJs 中双向绑定的原理

AngularJs 是一种基于MVVM模型的框架,其中的双向绑定机制就是依赖于“脏检查”机制实现的。AngularJs 在内存中创建了一个监控器(scope对象),用来监控model数据模型的变化。当view视图层发生变化时,AngularJs 会主动对比model和view,如果发现两者状态不一致则自动更新相关数据,并且重新渲染到view视图中。

双向绑定示例1

<!DOCTYPE html>
<html>
<head>
  <title>双向绑定示例1</title>
  <meta charset="UTF-8">
  <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.0/angular.min.js"></script>
</head>
<body>
  <div ng-app="myApp" ng-controller="myCtrl">
    <input type="text" ng-model="name">
    <h1>Hello, {{name}}</h1>
  </div>
  <script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
      $scope.name = 'AngularJs';
    });
  </script>
</body>
</html>

如上示例所示,其中 <input> 标签中的 ng-model="name" 属性用来与 myCtrl 控制器中的 $scope 中的 name 变量进行双向绑定。当输入框中的内容发生改变时,视图层变化,自动将变化的值更新到 $scope.name 中,从而完成了双向绑定的功能。

双向绑定示例2

<!DOCTYPE html>
<html>
<head>
  <title>双向绑定示例2</title>
  <meta charset="UTF-8">
  <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.0/angular.min.js"></script>
</head>
<body>
  <div ng-app="myApp" ng-controller="myCtrl">
    <ul>
      <li ng-repeat="name in names">{{name}}</li>
    </ul>
  </div>
  <script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {
      $scope.names = ['AngularJs', 'React', 'Vue'];
    });
  </script>
</body>
</html>

如上示例中,用 ng-repeat 指令将 $scope.names 数组中的成员循环遍历出来,最终显示在 ul 列表中。

如果页面中需要实时更新$scope.names 数组中的数据,可以在 myCtrl 控制器中添加如下代码:

setInterval(function () {
  $scope.$apply(function () {
    $scope.names.pop();
    $scope.names.unshift('AngularJs');
  })
}, 1000);

每隔1s中,将 $scope.names 数组中的最后一个元素删除,并将 AngularJs字符串插入到数组的最前面。由于这里使用了 $scope.$apply, AngularJs 会自动监测到 $scope.names 数据变化,再开始执行双向数据绑定,即视图层中的列表会随着数据的变化进行实时更新。

总结

在 AngularJs 中实现双向绑定的原理与机制主要依赖于“脏检查”机制, AngularJs 通过在内存中创建监控器(scope对象),用来监控model数据模型的变化,当view视图层发生改变时,AngularJs 会主动对比model和view,如果发现两者状态不一致则自动更新相关数据,并且重新渲染到view视图中。由于这一机制的存在,AngularJs 的双向绑定功能可大大减轻开发人员的负担,提高开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈AngularJs 双向绑定原理(数据绑定机制) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 详解vue数据渲染出现闪烁问题

    让我们来详细讲解如何解决 Vue 数据渲染出现闪烁问题。 什么是 Vue 数据渲染出现闪烁问题 当 Vue 数据进行数据渲染时,我们可能会发现数据在渲染完毕后出现了短暂的闪烁问题,这个问题主要由于下面两个原因造成的: 在 mounted 钩子中执行 Ajax 请求或调用第三方的 API,页面需要等数据加载完毕才会显示,所以就会出现闪烁效果。 在 mounte…

    Vue 2023年5月28日
    00
  • vue学习之Vue-Router用法实例分析

    Vue-Router 是 Vue.js 官方的路由插件,它和 Vue.js 具有相同的核心思想,即都是将 UI 和行为抽象成组件的形式,且都支持通过 props 向子组件传递数据。 Vue-Router 可以让我们通过 URL 和组件的映射关系来实现页面的跳转和切换,同时还支持路由的嵌套、命名视图、多种路由参数传递方式等功能,非常强大和灵活。 下面我们来分析…

    Vue 2023年5月27日
    00
  • vue实现右上角时间显示实时刷新

    下面我将详细讲解在Vue项目中如何实现右上角时间显示的实时刷新。 一、示例一——使用setInterval 首先,在Vue组件中,我们需要定义两个数据:一个用来保存当前时间的变量和一个用来保存计时器的变量。可以在data中定义这两个变量: data() { return { currentTime: ”, timer: null } } 接着,在mount…

    Vue 2023年5月29日
    00
  • 解决vue单页面应用打包后相对路径、绝对路径相关问题

    解决Vue单页面应用打包后相对路径、绝对路径相关问题是一个常见的问题,这里提供一个完整攻略,以帮助开发者快速解决问题。 问题描述 在开发Vue单页面应用时,需要引入各种资源文件,如CSS样式文件、JS脚本文件、图片资源文件等等。这些文件在开发时,都是通过相对路径或绝对路径引入的。但是,在打包完成后,这些资源文件会被压缩和合并,导致相对路径或绝对路径失效,进而…

    Vue 2023年5月28日
    00
  • Vue中watch和methods两种属性的作用

    当开发Vue应用时,经常需要对数据进行监听和操作,Vue提供了两个可以用来处理这些需求的属性:watch和methods。 watch属性的作用 watch属性可以用来监听数据变化,当监听到指定的数据发生变化时,会自动执行对应的回调函数。watch属性非常适合用来实现数据监听和异步操作。 具体来说,当watch监听到指定的数据发生变化时,会执行指定的回调函数…

    Vue 2023年5月28日
    00
  • Vue防抖与节流的使用介绍

    我来为你详细讲解“Vue防抖与节流的使用介绍”的完整攻略,请仔细阅读以下内容: 什么是防抖和节流 在介绍防抖和节流之前,我们先来了解一下两个重要概念: 函数调用频率:函数被调用的次数。比如说,你在搜索框中输入关键字,搜索框会实时检索结果,此时,输入的操作就是函数,它被调用的频率就是你输入的频率。 函数执行时间:函数运行所需的时间。比如说,你在网页上点击一个按…

    Vue 2023年5月29日
    00
  • Vue 图片压缩并上传至服务器功能

    下面是 Vue 图片压缩并上传至服务器的完整攻略。 1. 安装必要的库和工具 在使用 Vue 图片压缩并上传至服务器功能之前,需要确保已经安装以下必要的库和工具: vue: Vue.js 框架 axios: HTTP 请求库 compressorjs: 图片压缩库,用来将图片压缩至指定的大小 qs: Querystring 库,用来序列化表单数据 multe…

    Vue 2023年5月27日
    00
  • Vue3.2 setup语法糖及Hook函数基本使用

    Vue3.2 为了更方便地使用组合式 API,推出了 setup 语法糖及一系列 hook 函数。 setup语法糖 setup 语法糖是 Vue3.2 中引入的一种新的组件函数语法,它代替了 Vue2.x 中的 beforeCreate、created 等生命周期函数,使得我们能够更加方便有效地使用组合式 API,进一步提高了 Vue3.2 在开发体验和性…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部