2015-03-03 90 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