2013-09-05 9 views
12

मैं लटकती/एनजी-विकल्पAngularJS - एनजी-परिवर्तन

एनजी-परिवर्तन पर में भरी हुई json से अन्य संपत्तियों मैं भी चयनित ऑब्जेक्ट के 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/

उत्तर

7

चेक इस बाहर: http://jsfiddle.net/Qgmz7/9/

आप एक ngRepeat संदर्भ में नहीं हैं। ngOptions पूरी तरह से अलग काम करता है।

<select> पर ngModel <option> का मान प्राप्त करेगा, न कि संपूर्ण ऑब्जेक्ट। दोबारा, आप एक ngRepeat के अंदर नहीं हैं, आपके पास अपनी वस्तुओं तक पहुंच नहीं है।

मूल्य को पैरामीटर के रूप में पास करने की आवश्यकता नहीं है, तो आप इसे $scope से प्राप्त कर सकते हैं। के रूप में तथ्य की बात आप ngChange या तो जरूरत नहीं है, आप के लिए, बस $scope.$watch('campaign', ...)

तो

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

क्षमा करें यह मैं नहीं देख रहा हूँ। मैं आईडी के अलावा अन्य गुणों तक पहुंच प्राप्त करना चाहता हूं। – Developer

+0

फिर '$ scope.campaigns' में इसकी खोज कैसे करें? http://jsfiddle.net/Qgmz7/11/ –

+0

त्रुटि: _ परिभाषित नहीं किया गया है – Developer

22
बजाय एक संपत्ति में पास करने का

की तरह लग रही है, तो आप में चयनित ऑब्जेक्ट पारित कर सकते हैं इस

<select ng-model="campaign" ng-options="c.name for c in campaigns" ng-change="search2(campaign)"> 
जैसे फ़ंक्शन

Working Demo

+0

क्या कोई अन्य रास्ता नहीं है? अभियान में आईडी प्राप्त करने के लिए मैंने पहले ही अपना कोडिंग कर लिया है, यही कारण है कि यह इस तरह से किया गया था। बाद में वस्तु के अन्य गुणों तक पहुंचने के लिए आवश्यकता आती है। अब मैं न्यूनतम परिवर्तन के साथ ऑब्जेक्ट या गुणों को पास करना चाहता हूं। मुमकिन? – Developer

+0

@ डेवलपर आपके कोड में, अभियान मॉडल के रूप में क्या चुना जाता है 'आईडी' है और यह समझ अभिव्यक्ति' c.id के रूप में निर्धारित किया जाता है ... '। तो मुझे लगता है कि कोई अन्य आसान * तरीका नहीं है क्योंकि आप फ़ंक्शन में 'id' के अलावा कुछ भी नहीं पारित कर सकते हैं। – zsong

+0

हालांकि यह वही नहीं जो मैं खोज रहा था, लेकिन आपके समय के लिए एक प्लस। – Developer

0

आप भी इसे इस तरह से (हैक हम कह सकते हैं) की कोशिश कर सकते कर सकते हैं

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

असल में कोड का यह टुकड़ा क्या करेगा कि यह पूरी ड्रॉपडाउन सूची के साथ ng-change पर एनजी-मॉडल पास करेगा। तो खोज 2 फ़ंक्शन में, आप उस सूची में केवल ng-model मान खोज सकते हैं और अपनी वांछित वस्तु प्राप्त कर सकते हैं। संदर्भ के लिए

फिडल: https://jsfiddle.net/vaibhavgavali92/7b7xdyzj/8/