gpt4 book ai didi

javascript - AngularJS 刷新对象中的属性

转载 作者:行者123 更新时间:2023-11-28 00:32:38 30 4
gpt4 key购买 nike

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

$scope.student = {name:'Alex', Year: 4, cls : 'high'} ;//如果稍后在应用程序中设置此学生对象,
$scope.student = {name:'John', Year: 8, cls : 'primary'} ;//过滤器仍保留之前的值(student.name 为 'Alex')

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

有没有办法刷新绑定(bind)到作用域的对象中的内部属性值? (使用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 对象。

关于javascript - AngularJS 刷新对象中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28832211/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com