有一个对象由几个属性组成,对象设置为范围。这些属性与页面元素绑定。而且,该对象被传递到过滤器中。我的问题是当我将新对象设置为范围时,过滤器仍然具有先前对象的先前属性值。如果单独设置这些属性,则过滤器具有更新的值。
$scope.student = {name:'Alex', year: 4, cls : 'high'} ;
//如果稍后在应用程序中设置了此学生对象,则
$scope.student = {name:'John', year: 8, cls : 'primary'} ;
//过滤器仍然具有以前的值(student.name是' Alex')
但是,属性会单独更改,
$scope.student.name = 'John';
//过滤器具有最新值。
有没有办法刷新绑定到范围的对象中的内部属性值? (使用Angularjs 1.3。)
修改:页面用法
Registration::
<span class="std-infobar"> Info: {{student.name}} |{{student.year}} </span>
答案 0 :(得分:1)
如果对象定义为
$scope.student = {name:'Alex', year: 4, cls : 'high'};
以后再做
$scope.student = {name:'John', year: 8, cls : 'primary'};
您重新分配对象破坏参考。这意味着新的$scope.student
对象与前一个没有任何关联。您的过滤器不会更新,因为Angular在很大程度上依赖于此类对象引用。
现在你可以理解为什么$scope.student.name = 'John'
有效:$scope.student
不会改变,它的属性就是这样。这不是Angular特定的行为,而是正常的Javascript事情。
这是一个规则:如果你想改变你想要的对象,请确保你改变一个属性,而不是重新分配整个对象。所以你可以这样做:
$scope.student = {profile: {name:'Alex', year: 4, cls : 'high'}};
以后您可以将新学生设为
$scope.student.profile = {name:'John', year: 8, cls : 'primary'};
在这种情况下,请确保在过滤器中使用student.profile
对象。