2015-03-03 98 views
1

有一个对象由几个属性组成,对象被设置为范围。这些属性与页面元素绑定。而且,该对象被传递给一个过滤器。我的问题是,当我将新对象设置为范围时,过滤器仍然具有先前对象的先前属性值。如果这些属性单独设置,则过滤器具有更新的值。对象中的AngularJS刷新属性

$scope.student = {name:'Alex', year: 4, cls : 'high'} ; //如果这个学生对象在应用以后设置,
$scope.student = {name:'John', year: 8, cls : 'primary'} ; //滤波器仍然具有先前的值(student.name是“亚历克斯”)

但是,属性被单独改变, $scope.student.name = 'John'; //过滤器具有最新值。

有没有办法刷新绑定到范围的对象的内部属性值? (使用Angularjs 1.3)。

修改:在页面

Registration:: 
<span class="std-infobar"> Info: {{student.name}} |{{student.year}} </span> 
+0

你可以显示你的HTML在哪里使用这个变量? – 2015-03-03 12:53:13

+0

@ignacykasperowicz。感谢您的关注。我更新了我的答案。但是,页面上的这些元素已更新。大问题是,过滤器没有获得更新的值。 :( – 2015-03-03 12:59:56

+0

@charlietfl。谢谢..过滤器中存在的问题。过滤器没有得到更新的值... – 2015-03-03 13:00:50

回答

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不会改变,它的属性呢。这不是特定的行为,而是正常的Javascript事情。

这是一个规则然后:如果你想改变一个对象就像你想确保你改变一个属性,而不是重新分配整个对象。所以,你可以这样做:

$scope.student = {profile: {name:'Alex', year: 4, cls : 'high'}}; 

,以后你可以设置新的学生为

$scope.student.profile = {name:'John', year: 8, cls : 'primary'}; 

在这种情况下,请务必使用student.profile对象的过滤器。

+0

非常感谢你展示我的问题。当对象的结构和它绑定到范围的方式被改变了,它工作了!!! – 2015-03-03 13:40:15

+0

太棒了,很高兴它很有用。 – dfsq 2015-03-03 13:41:18