扫码关注官方订阅号
$scope.time = new Date(); vs $scope.time = { now: new Date()}
{{time}} vs {{time.now}}
改变一个属性比改变变量好,怎么分析?
人生最曼妙的风景,竟是内心的淡定与从容!
主要是因为JS prototypal inheritance..像ng-repeat, ng-switch, ng-view, ng-include, isolate scope等等会创建新的scope childScope = $scope.$new() 对于父scope上的原始数据类型 就没法实现双向绑定了..
这里主要涉及到数据双向绑定的问题
$scope2=$scope.$new();
我们先新建一个scope
$scope.time=new Date(); $scope2.time=$scope.time;
这样我们就把scope里的time赋给了scope2,但会出现一个问题,如果我在一个scope里改动了time值,改动的结果是不会反射到另一个scope的。
$scope.time=new Date(1234); $socpe.time==$scope2.time // false
所以数据就不能双向绑定了。 想要实现双向绑定,下面才是可行的办法。
$scope.time={now:new Date()}; $scope2.time=$scope.time; $scope.time.new=new Date(1234); $scope.time.now==$scope2.time.now; // true
对于一般来说 scope直接写变量是没有任何问题, 双向都可以读写. 但是scope 有继承机制, 基于本scope创建的子scope 会继承 time这个引用, 但是如果子scope里改变了其下的time的值,是不会改变父scope的引用的, 这样导致子scope下的值在改变以后无法影响上级的值. 这一行为,有时候是我们需要的. 而当这个变量有一定全局性的时候, 我们希望任何级别的元素都能改动并且反馈到上级, 这时候就得考属性. 因为引用没有任何改变, 而属性改变将反应到上级scope.
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
主要是因为JS prototypal inheritance..像ng-repeat, ng-switch, ng-view, ng-include, isolate scope等等会创建新的scope childScope = $scope.$new() 对于父scope上的原始数据类型 就没法实现双向绑定了..
这里主要涉及到数据双向绑定的问题
我们先新建一个scope
这样我们就把scope里的time赋给了scope2,但会出现一个问题,如果我在一个scope里改动了time值,改动的结果是不会反射到另一个scope的。
所以数据就不能双向绑定了。
想要实现双向绑定,下面才是可行的办法。
对于一般来说 scope直接写变量是没有任何问题, 双向都可以读写.
但是scope 有继承机制, 基于本scope创建的子scope 会继承 time这个引用, 但是如果子scope里改变了其下的time的值,是不会改变父scope的引用的, 这样导致子scope下的值在改变以后无法影响上级的值. 这一行为,有时候是我们需要的.
而当这个变量有一定全局性的时候, 我们希望任何级别的元素都能改动并且反馈到上级, 这时候就得考属性.
因为引用没有任何改变, 而属性改变将反应到上级scope.