2016-03-14 56 views
0

我想最終比較兩個對象數組中的條目,所以我創建了一個名爲$ scope.oitems和$ scope.items的數組,這兩個數組都分配了從數據服務,setItems。我有ng模型爲$ scope.items的輸入;但是,當我查看$ scope.items和$ scope.oitems時,它們都會在更改輸入字段中的內容時更改值。我有一個對象$ scope.thing,並且應該是原始副本$ scope.othing,它們都只有'name'和'id'屬性,都是在數據服務setThing中分配的$分配給DATAFROMSERVICE.name和DATAFROMSERVICE.id的scope.name和$ scope.id。 $ scope.verything和$ scope.thing都改變了,當輸入只有ng-modeled到$ scope.thing改變時,無論如何,$ scope.name和$ scope.id不要改變,這就是我想要的$ scope。沒有和$ scope.oitems,因爲這些應該是從服務返回的數據的副本,以備後用。我在做什麼不正確的工作,導致他們不能成爲我的服務數據的原始副本?這是上述ng模型更改另一個對象的屬性值的問題

http://jsfiddle.net/Lvc0u55v/1163/

function MyCtrl($scope) { 
$scope.oitems = new Array(); 
$scope.othing = new Object(); 


function setItems() { 
    var data = [{a:'foo', b:2}, {a:'bar', b: 1}]; //data returned from service 
    $scope.oitems = data; 
    $scope.items = data; 
} 
setItems(); 
function setThing() { 
    var dat = {name:'test', id: 12}; //data returned from service 
    $scope.othing = dat; 
    $scope.name = dat.name; 
    $scope.id = dat.id; 
    $scope.thing = dat; 
} 
setThing(); 


} 

回答

0

我有一個對象,$scope.thing,什麼應該是原件$scope.othing

這是不正確。兩個變量都引用同一個對象。如果你想複製使用angular.copy()


至於$scope.name = dat.name; ....這隻會被分配一次。

由於值是基元而不是對象,因此在初始分配爲make後,對$scope.namedat.name的更改不會更改其他值。

原語沒有繼承同樣的方式物體做

目前尚不清楚哪些行爲你正在尋找

+0

這個問題沒有使用angular.copy() – pbordeaux

+0

這裏是我想要的工作示例,對於混淆抱歉抱歉,感謝angular.copy()http ://jsfiddle.net/Lvc0u55v/1184/ – pbordeaux

0

您可以更改這個way.Working代碼的代碼下面的鏈接描述了我的問題的簡化示例的小提琴。

$scope.name: {{name.name}} 
$scope.id: {{id.id}} (this works) 

http://jsfiddle.net/Lvc0u55v/1165/

+0

實際上,這是我想要的相反功能。對不起,如果我不清楚。我希望ng-model只能綁定到$ scope.thing和$ scope.items,我希望$ scope.oitems和$ scope.of來保存數據服務中原始值的值。 $ scope.name和$ scope.id的方式有 – pbordeaux

相關問題