AngularJS刷新对象中的属性

AngularJS refresh attributes in object

本文关键字:属性 对象 刷新 AngularJS      更新时间:2023-09-26

有一个由两个属性组成的对象,该对象被设置为作用域。这些属性与页面元素绑定。此外,该对象被传递到过滤器中。我的问题是,当我将一个新对象设置为作用域时,过滤器仍然具有上一个对象的上一个属性值。如果这些属性是单独设置的,则过滤器具有更新的值。

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

如果对象定义为

$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对象。