(十五)在controller之外修改$scope中的数据,双向绑定特性失效,不能自动刷新
2015-04-17 09:48
513 查看
在angularjs中通过angular.element(dom).scope()可以拿到某个dom元素关联的作用域,从而可以访问$scope中的属性和方法。但是在ng-controller函数之外修改$scope中的数据,angular的$scope是不会自动刷新的,即双向绑定特性失效。
在浏览器运行这段代码:默认按钮a和b都是disabled状态,点击enable-a可以让a按钮变成enable,但是点击enable-b按钮b按钮仍然处于disabled状态。对比enableA和enableB函数,可以看到其实2者功能是一样的,实现方式也是一样的,唯一的差别在于enableA处于controller范围之内,而enableB则是在controller函数之外。
使用angularjs,我们的数据和方法都是封装在$scope中的,但是总有那么一些特殊情况让我们不得不自己获取$scope然后调用方法或者修改属性,这个时候我们就面临双向绑定失效的问题了。不知道这是不是angularjs的bug,如果要解决这个问题。我们可以自己手动调用$scope.$digest()来触发脏值检测,这样就可以实现$scopes中的数据刷新了。
对应上面的代码,我们只要修改enbaleB就可以完成需要的功能。
<html> <head> <script src="angular-1.3.15.js"></script> <script> var app = angular.module('app', []); app.controller("myController",function($scope){ $scope.buttonAdisable = true; $scope.buttonBdisable = true; //让a按钮可用 $scope.enableA=function(){ $scope.buttonAdisable=false; }; }); // 启动模块 angular.element(document).ready(function() { angular.bootstrap(document.getElementById("root_div"),["app"]); }); // 让b按钮可用 function enableB() { var scope = angular.element(document.getElementById('b')).scope(); scope.buttonBdisable=false; } </script> </head> <body> <div id="root_div" ng-controller="myController"> <input type="button" value="a" id="a" ng-disabled="buttonAdisable"/> <input type="button" value="b" id="b" ng-disabled="buttonBdisable"/> <br/> <input type="button" value="enable-a" ng-click="enableA();"/> </div> <input type="button" value="enable-b" onclick="enableB();"/> </body> </head>
在浏览器运行这段代码:默认按钮a和b都是disabled状态,点击enable-a可以让a按钮变成enable,但是点击enable-b按钮b按钮仍然处于disabled状态。对比enableA和enableB函数,可以看到其实2者功能是一样的,实现方式也是一样的,唯一的差别在于enableA处于controller范围之内,而enableB则是在controller函数之外。
使用angularjs,我们的数据和方法都是封装在$scope中的,但是总有那么一些特殊情况让我们不得不自己获取$scope然后调用方法或者修改属性,这个时候我们就面临双向绑定失效的问题了。不知道这是不是angularjs的bug,如果要解决这个问题。我们可以自己手动调用$scope.$digest()来触发脏值检测,这样就可以实现$scopes中的数据刷新了。
对应上面的代码,我们只要修改enbaleB就可以完成需要的功能。
function enableB() { var scope = angular.element(document.getElementById('b')).scope(); scope.buttonBdisable=false; scope.$digest(); }
相关文章推荐
- angularjs的使用:$scope与双向数据绑定,自动注入(6)
- ORM框架实现数据的自动绑定添加修改
- Json数据异步绑定到界面的Table并且自动刷新原理及代码
- AngularJs 特性 之 双向数据绑定
- 对子页面自动关闭后,自动刷新父页面的修改后的数据 的做法
- angular 双向数据绑定 初始化页面hide后,就绑定失效了
- 如何使用 BindingSource 绑定 ListBox,同时解决绑定 List<T> 后修改数据源不能同时刷新界面显示的问题
- thinkphp 在数据库更新(save)的时候,如果字段没有被修改,会更新失败 和数据的自动验证,插入的时候可以自动验证,但更新的时候就不能验证了
- japid-controller自动绑定的数据类型
- 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法
- 如何让Excel输入数据后自动保护,不能被修改
- C#中DataGridView绑定了DataTable后,通过代码修改DataGridView中的数据,总有一行(被修改过并被用户选中的行集合中索引为0的行)不能被UpDate回数据库的问题和解决办法
- IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据
- hibernate 一对一、多对一 双向关联的问题——只能在多的一方添加、修改数据,不能在多的一方修改添加
- spring mvc 中通过controller 传递对象给jsp,并且数据绑定,在修改值后回传对象给controller
- vue.js组件之间通讯的数据双向绑定----父亲把数据传递给儿子,儿子更改数据后,重新发送给父亲,父亲数据更改后,属性会重新发送个儿子,儿子刷新新数据
- IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据
- Json数据异步绑定到界面的Table并且自动刷新原理及代码
- 无刷新显示数据(摘抄)修改。ajax。献给和我一样的人。防止大家看到一堆堆的代码,拿来不能用,改还不知道从那里入手,给人家发消息还不回的人
- Json数据异步绑定到界面的Table并且自动刷新