AngularJS刷新对象中的属性

时间:2015-03-03 12:47:22

标签: javascript angularjs

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

$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>

1 个答案:

答案 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对象。