2013-09-05 11 views
12

Jak mogę uzyskać inne właściwości z załadowanym json w rozwijanych/NG-opcjiangularjs - pass innych wybranych właściwości obiektu na NG-zmiany

Na NG-zmiany Chciałbym również przekazać typu kampanii wybranego obiektu.

Jak mógłbym to zrobić?

moim zdaniem wygląda jak ten

<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> 

moim kontroler patrzy jak ten

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/

Odpowiedz

7

to sprawdzić: http://jsfiddle.net/Qgmz7/9/

Nie jesteś w kontekście ngRepeat. ngOptions działa zupełnie inaczej.

ngModel na <select> otrzyma wartość <option>, a nie całego obiektu. Ponownie, nie jesteś w środku ngRepeat, nie masz dostępu do swoich obiektów.

Nie trzeba przekazywać wartości jako parametru, można ją uzyskać od $scope. Za sprawą faktu nie trzeba ngChange albo, można po prostu $scope.$watch('campaign', ...)

Więc

$scope.search2 = function() { 
    console.log($scope.campaign); 
} 
+0

Niestety to nie jest to, czego szukam. Chciałbym uzyskać dostęp do innych właściwości oprócz identyfikatora. – Developer

+0

A co powiesz na wyszukiwanie w '$ scope.campaigns'? http://jsfiddle.net/Qgmz7/11/ –

+0

Błąd: _ nie jest zdefiniowany – Developer

22

Zamiast przechodzącą w nieruchomości, można przekazać wybrany obiekt w funkcja podobna do tej

<select ng-model="campaign" ng-options="c.name for c in campaigns" ng-change="search2(campaign)"> 

Working Demo

+0

Czy jest jakiś inny sposób? Już zrobiłem swoje kodowanie, aby otrzymać identyfikator w kampanii, dlatego tak się stało. później pojawia się wymóg, aby uzyskać dostęp do innych właściwości obiektu. Teraz lubię przekazywać obiekt lub właściwości przy minimalnych zmianach. Możliwy? – Developer

+0

@Developer W twoim kodzie, co jest wybrane jako model kampanii jest "id" i jest określane przez wyrażenie "c.id jako ...". Sądzę więc, że nie ma innego * łatwego * sposobu, ponieważ nie można przekazać niczego innego niż "id" do funkcji. – zsong

+0

choć tego nie szukałem, ale dodatkowo dla twojego czasu. – Developer

0

Można też spróbować to w ten sposób (Hack możemy powiedzieć),

<select ng-model="campaign" ng-options="c.id as c.name for c in campaigns" ng-change="search2(campaign,campaigns)"> 
     <option value="">-- choose campaign --</option> 
</select> 

Zasadniczo to, co zrobi ten fragment kodu, to że po prostu przekazuje model ng wraz z całą listą rozwijaną do ng-change. Tak więc w funkcji wyszukiwania2 można po prostu przeszukać tę wartość ng-model na tej liście i uzyskać żądany obiekt.

Fiddle dla odniesienia: https://jsfiddle.net/vaibhavgavali92/7b7xdyzj/8/

Powiązane problemy