2015-10-20 70 views
0

我已经写了像下面的代码,获取模型值时NG重复

<div ng-repeat="rnewobj in rnewobjs"> 
    <select name="abc" 
    ng-model="rnewobj.objkey.value" 
    ng-options="item.id as item.name for item in session_dd" 
    ng-change="valuechanged()" required> 
    </select> 

我如何获得变化的模型值。我想从控制器更改模型值。我该怎么做呢?

+0

你为什么不把rnewobj传递给valuechange() –

回答

1

这是您的要求为例,设定值进行打印时,它改变了(我只是用一个按钮,但你可以做什么):

http://jsfiddle.net/U3pVM/19572/

HTML

<div ng-repeat="rnewobj in rnewobjs"> 
    <select 
     name="abc" 
     ng-model="rnewobj.objkey.value" 
     ng-options="item.id as item.name for item in session_dd" 
     ng-change="valuechanged(rnewobj)" required> 
    </select> 
    <button type="button" ng-click="reset(rnewobj)">Reset to item 1</button> 
</div> 

的Javascript

$scope.session_dd = [{ 
    id: 1, 
    name: "item1" 
}, { 
    id: 2, 
    name: "item2" 
}, { 
    id: 3, 
    name: "item3" 
}]; 

$scope.rnewobjs = [{ 
    objkey: { 
     value: 1 
    } 
}, { 
    objkey: { 
     value: 2 
    } 
}, { 
    objkey: { 
     value: 3 
    } 
}]; 

// print the value when changed 
$scope.valuechanged = function (item) { 
    console.log(item.objkey.value); 
}; 

// set the value 
$scope.reset = function (item) { 
    item.objkey.value = 1; // reset to 1 
}; 
+0

@ David Spence - 抱歉,我的错误。这是在ng-repeat中。 – Hacker

+0

@黑客ok会为你更新 –

+0

@Hacker能帮到你吗? –

0

您需要实现观察器功能。

$scope.$watch('rnewobj.objkey.value', function(data) { 
    console.log(data); 
}); 

该值存储在数据变量中。

+0

你不需要看任何东西!这是ng-change的要点 – Frondor

+0

但是,如果他不能让它工作,守望者是一个简单的解决方案,它也会做同样的事情。 – Miha2255

+0

但它是反模式。我们同意$ watch不会让你的代码变得很糟糕,但是尽可能避免它。 – Frondor

0

使用$scope具有相同名称的变量。它依赖于Angular的双向数据绑定。 Suppossing您想在阵列上编辑对象指数2:

app.controller('MyController', function ($scope) { 
    var index = 2; 
    $scope.rnewobjs[index].objkey.value = 'YourValue'; 
}); 

值将自动对你的看法而改变。

+0

这是正确的答案。 – Frondor

+0

@Blackus - 该对象不直接存在。它位于ng-repeat中 – Hacker

+0

您可以从控制器的'rnewobjs'数组访问您的对象并对其进行编辑。它将被广播给你的观点。因此我编辑了我的答案。 – Blackus