Подтвердить что ты не робот

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/

4b9b3361

Ответ 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)">

Рабочий демонстрационный пример