angularjs的数据更新问题

在angularjs里面,检查绑定的数据到底有没有发生变化,是数据绑定的基础,只要知道数据改变了,angularjs才会去更新视图,而angularjs提供了一个用的方法$scope.$apply();

至于什么时候使用此方法呢?我先给出一个例子:

<!DOCTYPE html>
<html lang="zh-cn" ng-app="myWeb">
<head>
    <meta charset="utf-8">
    <title>视图更新</title>
    <link rel="stylesheet" href="./libs/bootstrap.min.css">
    <script src="./libs/angular.min.js"></script>
</head>
<body ng-controller="shou">

<div ng-bind="name"></div>
<script>
    var app = angular.module(‘myWeb‘, []);
    app.controller(‘shou‘, [‘$scope‘, function($scope) {
        $scope.name = ‘我是张三‘;
        setTimeout(function(){
            $scope.name = ‘我是李四‘;
        }, 1000);
    }]);
</script>
</body>
</html>

试一下这段代码发现页面再出现‘我是张三’, 后不会变为‘我是李四’,  这是不符合我们想要的呀,所以这个时候$scope.$apply()就可以登场了

代码如下:

<!DOCTYPE html>
<html lang="zh-cn" ng-app="myWeb">
<head>
    <meta charset="utf-8">
    <title>视图更新</title>
    <link rel="stylesheet" href="./libs/bootstrap.min.css">
    <script src="./libs/angular.min.js"></script>
</head>
<body ng-controller="shou">

<div ng-bind="name"></div>
<script>
    var app = angular.module(‘myWeb‘, []);
    app.controller(‘shou‘, [‘$scope‘, function($scope) {
        $scope.name = ‘我是张三‘;
        setTimeout(function(){
            $scope.$apply(function(){
                $scope.name = ‘我是李四‘;
            });
        }, 1000);
    }]);
</script>
</body>
</html>

上面的代码的效果是在出现了‘我是张三’,后1秒就会变为‘我是李四’,这正是我们想要的效果,理想状态。

我的片面理解就是$scope.$apply()会通知angularjs数据改变了,快去更新视图。

同时还有一个方法也可以实现如上的效果:那就是$timeout, 代码如下:

<!DOCTYPE html>
<html lang="zh-cn" ng-app="myWeb">
<head>
    <meta charset="utf-8">
    <title>视图更新</title>
    <link rel="stylesheet" href="./libs/bootstrap.min.css">
    <script src="./libs/angular.min.js"></script>
</head>
<body ng-controller="shou">

<div ng-bind="name"></div>
<script>
    var app = angular.module(‘myWeb‘, []);
    app.controller(‘shou‘, [‘$scope‘, ‘$timeout‘, function($scope, $timeout) {
        $scope.name = ‘我是张三‘;
        $timeout(function(){
            $scope.name = ‘我是李四‘;
        }, 1000);
    }]);
</script>
</body>
</html>

为什么$timeout也可以呢?  这个时候我就在想这可能和angualrjs视图渲染的方式和js的事件轮询有关了,这个地方就留给好奇的大兄弟去深究了....

时间: 2024-10-13 11:57:46

angularjs的数据更新问题的相关文章

angularJS——数据更新了但是view层却未更新问题及解决方法

搬运自:https://www.cnblogs.com/yky-iris/p/9251230.html?utm_source=debugrun&utm_medium=referral 视图不更新问题及原因: 在原生js或者第三方框架下,修改model,是有可能不会触发视图更新的,比如setTimeout.jquery插件.因为他们脱离了Angularjs的上下文,Angularjs并不能监听到数据的改变. 解决方法:利用$apply()手动更新视图,如下. html: <p>{{nam

浅谈angular2与angularJS的区别

简介 大家好,今天给大家介绍一下angular,相信做过前端的小伙伴们都知道angular的大名,angularJS自2012年发布起就受到了大家的广泛关注.他首次提出了双向绑定概念让所有人都耳目一新,2016年angular2正式被发布,那么angular2到底有什么值得期待的地方呢,接下来讲一下angular2吸引人的地方. 1.1.1  angularJS的困境以及angular2的新特性 首先呢我们讨论一下angularJS的一些不足之处: 1.饱受诟病的性能问题 通过检查进行数据更新,

带你走近AngularJS - 创建自定义指令

为什么使用AngularJS 指令? 使用过 AngularJS 的朋友应该最感兴趣的是它的指令.现今市场上的前端框架也只有AngularJS 拥有自定义指令的功能,并且AngularJS 是目前唯一提供Web应用可复用能力的框架. 目前有很多JavaScript 产品提供插件给Web开发人员.例如, Bootstrap 就是当前比较流行的提供样式和JavaScript插件的前端开发工具包.但是开发人员在使用Booostrap中的插件时, 必须切换到JavaScript 模式来写 jQuery

【Ionic+AngularJS 开发】之『个人日常管理』App(二)

准备工作 资源 预装工具 安装bower 1 npm install -g bower 安装ngCordova 1 bower install ngCordova (*由于网络获取资源的原因,后面几次建项目后都无法下载到,自己便复制了原来的ngCordova目录(到YourProject\wwww\lib目录下),发现也是可以使用的) 下载好后,在项目的index.hmtl进行引用: 1 <script src="lib/ngCordova/dist/ng-cordova.js"

基于AngularJS/Ionic框架开发的性能优化

AngularJS作为强大的前端MVVM框架,虽然已经做了很多的性能优化,但是我们开发过程中的不当使用还是会对性能产生巨大影响. 下面提出几点优化的方法: 1. 使用单次绑定符号{{::value}} AngularJS的性能优化方法之一是减少双向绑定.我们知道AngularJS的双向绑定是通过为每个需要双向绑定的数据对象添加$$watchers,一旦某个scope的数据发生了更新,就触发脏检测($digest),深度优先遍历所有scope对象的$$watchers值的old/new value

关于AngularJS学习整理---核心特性

接触.学习AngularJS已经三个多月了,随着学习的深入,有些东西刚开始不明白,现在开始慢慢明白起来.于是,开始整理这几个月的学习成果.要不又要忘了...  初学Angular,是看到慕课网大漠穷秋老师教程学的,以下内容是参考教程,还有自己的整理写的,如有相似之处,莫怪莫怪... 步入正题.学习Angular,首先得了解.熟知.掌握它的四大核心特性. 一.MVC模式 Model(模型):是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据. View(视图):  用户

摆脱DOM操作,从TodoMVC看angularJS

取代jQuery? 我很久之前便听说了angularJS的大名,之前的leader也经常感叹angularJS的设计如何如何精妙,可叹一直没有机会深入了解,国庆长假因为没钱出游,倒是可以对他做一个了解...... 根据之前的经验,就现有的前端项目,如果最初没有良好的设计,做到一定阶段一定会变得难以维护,就算最初有设计,变化无常的PM也会让你的项目BUG丛生. 一个页面的复杂程度不断的增加,依赖模块也会变得混乱,而其中最为头疼的就是页面级随心所欲的DOM操作了! MVC类的框架可以很好的解决以上问

angularjs数据交互

异步问题ajax异步请求数据完数据后给$scope赋值的时候需要检查$scope的数据更新没有.要不然无法绑定数据. <!DOCTYPE html> <html ng-app="test_ajax"> <head> <meta charset="utf-8"> <title></title> <script src="angular.js" charset="

vue2.x入坑总结—回顾对比angularJS/React的一统

从感性的角度讲,我是不屑于用VUE,觉得react套件用起来更顺手,但是vue现在越来火,所以也不得入vue(杂烩汤)的坑.vue/anguarJS/React,三者对关系现在就是: https://www.zhoulujun.cn/uploadfile/images/2018/0626/20180626214906428779269.jpg 自己ps了下,觉得深有道理,骚年们自己体悟,然后再问军哥^_^ 不过回归真题,看vue还是先了解下https://cdn.zhoulujun.cn/vue