Angularjs - передать выбранный объект другим свойствам на ng-change
Как я могу получить другие свойства из загруженного json в dropdown/ng-options
В ng-change мне также нравится передать выбранный объект campaignType.
Как я могу это сделать?
Мой вид выглядит следующим образом
<div ng-app>
<div ng-controller="cCtrl">
<select ng-model="campaign" ng-options="c.id as c.name for c in campaigns" ng-change="search2(c.campaignType)">
<option value="">-- choose campaign --</option>
</select>
</div>
</div>
Мой контроллер выглядит следующим образом
function cCtrl($scope) {
$scope.campaigns = [{
"custID": 1,
"custName": "aaa ",
"msgID": 3,
"msgName": "Email Test Msg",
"id": 2,
"name": "Email Test Campaign",
"description": "Test Campaign",
"campaignType": "Email",
"created": "1374229715",
"isActive": 1,
"isDeleted": 0
}];
$scope.search2 = function (campaignType) {
alert(campaignType); // not working
alert($scope.campaign.campaignType); // not working
//console.log($scope.campaign.campaignType);
}
}
http://jsfiddle.net/webtheveloper/Qgmz7/8/
Ответы
Ответ 1
Проверьте это: http://jsfiddle.net/Qgmz7/9/
Вы не находитесь в контексте ngRepeat. ngOptions работает совершенно иначе.
ngModel на <select>
получит значение <option>
, а не весь объект. Опять же, вы не находитесь внутри ngRepeat, у вас нет доступа к вашим объектам.
Не нужно передавать значение в качестве параметра, вы можете получить его из $scope
. На самом деле вам также не нужно ngChange, вы можете просто $scope.$watch('campaign', ...)
Итак,
$scope.search2 = function () {
console.log($scope.campaign);
}
Ответ 2
Вместо передачи в свойстве вы можете передать выбранный объект в функцию, подобную этой
<select ng-model="campaign" ng-options="c.name for c in campaigns" ng-change="search2(campaign)">
Рабочий демонстрационный пример