ng-model更改另一个对象的属性值

时间:2016-03-14 14:20:55

标签: javascript angularjs scope

我试图最终比较两个对象数组中的条目,所以我创建了一个名为$ scope.oitems和$ scope.items的数组,它们都被赋予了从数据服务setItems返回的值。我的输入是ng-modelled到$ scope.items;但是,当我查看$ scope.items和$ scope.oitems时,当我更改输入字段中的内容时,它们都会更改值。我有一个对象,$ scope.thing,以及应该是原始副本$ scope.othing,两者都只有'name'和'id'属性,都在数据服务中分配,setThing,以及$ scope.name和$ scope.id分配了DATAFROMSERVICE.name和DATAFROMSERVICE.id。 $ scope.othing和$ scope.thing都会在输入只有ng-mledled到$ scope.thing时改变HOWEVER,$ scope.name和$ scope.id不要改变,这就是我想要的$ scope。 othing和$ scope.oitems,因为它们应该是从稍后要使用的服务返回的数据的副本。我在分配任何内容和oitems时做错了什么导致它们不是我服务中数据的原始副本?这是上面描述的我的问题的简化示例的小提琴

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();


}

2 个答案:

答案 0 :(得分:0)

您可以通过这种方式更改代码。工作代码是以下链接。

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

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

答案 1 :(得分:0)

  

我有一个对象$scope.thing,应该是原始副本$scope.othing

这是不正确的。两个变量都引用同一个对象。如果您想复制一份,请使用angular.copy()

至于$scope.name = dat.name; ....这只会被分配一次。

由于这些值是基元而非对象,因此在初始赋值为make之后,对$scope.namedat.name的更改不会更改另一个。

基元没有与对象相同的继承方式

目前尚不清楚您正在寻找什么行为