2013-09-05 9 views
12

Come posso ottenere altri oggetti di JSON caricata in discesa/ng-optionsangularjs - pass selezionate le proprietà dell'oggetto in ng-cambiamento

On ng-cambiamento mi piace anche passare del tipo di campagna dell'oggetto selezionato.

Come potrei farlo?

My View sta cercando in questo modo

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

mio controller è simile a questo

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/

risposta

7

Check this out: http://jsfiddle.net/Qgmz7/9/

Non sei in un contesto ngRepeat. ngOptions funziona in modo completamente diverso.

ngModello su un <select> otterrà il valore di <option>, non l'intero oggetto. Di nuovo, non sei all'interno di ngRepeat, non hai accesso ai tuoi oggetti.

Non è necessario passare il valore come parametro, è possibile ottenerlo da $scope. È un dato di fatto che non c'è bisogno ngChange sia, si può solo $scope.$watch('campaign', ...)

Così

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

scusate questo non è quello che sto cercando. Vorrei avere accesso ad altre proprietà oltre a id. – Developer

+0

Allora che ne dici di cercarlo in '$ scope.campaigns'? http://jsfiddle.net/Qgmz7/11/ –

+0

Errore: _ non è definito – Developer

22

Invece di passare a una proprietà, è possibile passare l'oggetto selezionato nella funzione come questa

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

Working Demo

+0

c'è qualche altro modo? Ho già fatto il mio codice per ricevere l'id in campagna, ecco perché è stato fatto in quel modo. in seguito i requisiti arrivano per accedere ad altre proprietà dell'oggetto. Ora mi piace passare oggetti o proprietà con il minimo cambiamento. Possibile? – Developer

+0

@Developer Nel tuo codice, ciò che è selezionato come modello di campagna è 'id' ed è determinato dall'espressione di comprensione' c.id as ... '. Quindi immagino che non ci sia un altro * facile * modo in cui non è possibile passare nulla di diverso da 'id' alla funzione. – zsong

+0

anche se questo non è quello che stavo cercando, ma più uno per il vostro tempo. – Developer

0

si può anche provare in questo modo (Hack si può dire),

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

Fondamentalmente ciò che questo codice farà è che passerà semplicemente ng-model insieme all'intero elenco a discesa su ng-change. Quindi, nella funzione search2, è sufficiente cercare il valore ng-model in quell'elenco e ottenere l'oggetto desiderato.

Fiddle per riferimento: https://jsfiddle.net/vaibhavgavali92/7b7xdyzj/8/

Problemi correlati