2015-10-20 65 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