วิธีการตั้งค่าตัวเลือกที่เลือกของตัวควบคุมรายการแบบหล่นลงโดยใช้ JS เชิงมุม


139

ฉันกำลังใช้ Angular JS และฉันจำเป็นต้องตั้งค่าตัวเลือกที่เลือกของตัวควบคุมรายการแบบหล่นลงโดยใช้ JS เชิงมุม ยกโทษให้ฉันถ้านี่ไร้สาระ แต่ฉันใหม่กับ Angular JS

นี่คือการควบคุมรายการแบบหล่นลงของ html ของฉัน

 <select ng-required="item.id==8 && item.quantity > 0" name="posterVariants"
   ng-show="item.id==8" ng-model="item.selectedVariant" 
   ng-change="calculateServicesSubTotal(item)"
   ng-options="v.name for v in variants | filter:{type:2}">
  </select>

หลังจากนั้นฉันก็จะได้รับประชากร

 <select ng-options="v.name for v in variants | filter:{type:2}" ng-change="calculateServicesSubTotal(item)"
ng-model="item.selectedVariant" ng-show="item.id==8" name="posterVariants"
ng-required="item.id==8 &amp;&amp; item.quantity &gt; 0" class="ng-pristine ng-valid ng-valid-required">
    <option value="?" selected="selected"></option>
    <option value="0">set of 6 traits</option>
    <option value="1">5 complete sets</option>
</select>

ฉันจะตั้งค่าการควบคุมสำหรับvalue="0"ให้เลือกได้อย่างไร?


5
<option value="0" ng-selected="true">set of 6 traits</option>
Muhammad Shahzad

คำตอบ:


191

ฉันหวังว่าฉันเข้าใจคำถามของคุณ แต่สั่งสร้างแบบสองทางที่มีผลผูกพันระหว่างรายการที่เลือกในการควบคุมและความคุ้มค่าของng-model item.selectedVariantซึ่งหมายความว่าการเปลี่ยนแปลงitem.selectedVariantใน JavaScript หรือการเปลี่ยนแปลงค่าในการควบคุมอัพเดทอื่น ๆ หากitem.selectedVariantมีค่า0ควรเลือกรายการนั้น

ถ้าvariantsเป็นอาร์เรย์ของวัตถุitem.selectedVariantต้องตั้งค่าเป็นหนึ่งในวัตถุเหล่านั้น ฉันไม่ทราบว่าคุณมีข้อมูลใดอยู่ในขอบเขตของคุณ แต่นี่เป็นตัวอย่าง:

JS:

$scope.options = [{ name: "a", id: 1 }, { name: "b", id: 2 }];
$scope.selectedOption = $scope.options[1];

HTML:

<select data-ng-options="o.name for o in options" data-ng-model="selectedOption"></select>

นี่จะทำให้รายการ "b" ถูกเลือก


ฉันมีไฟล์ตัวควบคุมชื่อ order.js ดังนั้นชื่อ html นั้นคือ order.html เดียวกันกับที่ตัวควบคุมอยู่ ฉันควรตั้งค่าตัวแปรที่เลือกไว้ที่นั่นหรือโดยตรงบนตัวควบคุม?
themhz

โดยปกติแล้วคุณจะตั้งสิ่งเหล่านี้ในตัวควบคุมบน$scopeตัวแปร ดังนั้นสมมติว่าคุณอยู่ในขอบเขตเดียวในคอนโทรลเลอร์คุณสามารถ$scope.item.selectedVariant = 0ตั้งค่าเริ่มต้นที่เลือกไว้ได้ คุณสามารถตั้งค่าตัวแปรโดยตรงบนตัวควบคุมใน HTML โดยใช้คำสั่งng-initแต่มันค่อนข้างยุ่งเหยิงในความคิดของฉัน!
Steve Klösters

คุณช่วยอธิบายเกี่ยวกับสิ่งที่variantsอยู่ในขอบเขตของคุณ? คุณจะต้องตั้งตรงไปยังรายการของitem.selectedVariant variants
Steve Klösters

$ scope.item.selectedVariant = 0; สิ่งนี้จะแยกหน้าถ้าฉันใส่ไว้ในไฟล์ controler
พวกเขา

คุณสามารถระบุไวยากรณ์โดยใช้ ng-init ได้ไหม?
themhz

34

ฉันไม่ทราบว่าสิ่งนี้จะช่วยให้ใครหรือไม่ แต่ในขณะที่ฉันกำลังเผชิญปัญหาเดียวกันฉันคิดว่าการแบ่งปันวิธีที่ฉันได้รับการแก้ไข

คุณสามารถใช้ติดตามโดยng-optionsแอตทริบิวต์ในของคุณ

สมมติว่าคุณมี:

variants:[{'id':0, name:'set of 6 traits'}, {'id':1, name:'5 complete sets'}]

คุณสามารถพูดถึงคุณng-optionsเป็น:

ng-options="v.name for v in variants track by v.id"

หวังว่าสิ่งนี้จะช่วยให้ใครบางคนในอนาคต


ใช่ ในที่สุด! ขอบคุณ
davaus

ยิ่งใหญ่ ฉันพลาดการติดตามเพื่อทำสิ่งนี้แบบไดนามิก
จอห์น

ที่สุด! ปัญหาของฉันแก้ไขได้โดยการติดตาม ขอบคุณ
Kishan

นี่คือสิ่งที่ฉันหายไป! ฉันกำลังตั้งค่าฟิลด์ขอบเขตที่ถูกผูกไว้กับngModelอย่างถูกต้อง แต่มันไม่ทำงานจนกว่าฉันจะเพิ่มtrack by! ขอบคุณ!
Cindy K.

7

หากคุณกำหนดค่า 0 ให้กับitem.selectedVariantมันควรจะเลือกโดยอัตโนมัติ ตรวจสอบตัวอย่างในhttp://docs.angularjs.org/api/ng.directive:select$scope.color='red'ที่เลือกสีแดงโดยค่าเริ่มต้นโดยเพียงแค่การกำหนด


ฉันจะตั้งค่า item.selectedVariant ได้ที่ไหน ถ้าฉันกำหนด $ scope.item.selectedVariant = 0; ในตัวควบคุมของไฟล์, มุม
สลาย

3
คุณสามารถวาง HTML ที่ตรงกันได้หรือไม่
Tadeusz Wójcik

ฉันคิดว่าแต่ละรายการใน orderGrid จำเป็นต้องเลือกชุดตัวแปรเป็น 0
Tadeusz Wójcik

คุณสามารถให้รหัสตัวอย่างได้หรือไม่ ฉันไม่คุ้นเคยกับเชิงมุมขอโทษ
พวกเขา

7

ฉันเห็นที่นี่แล้วเขียนคำตอบที่ดี แต่บางครั้งการเขียนเหมือนกันในรูปแบบอื่นจะมีประโยชน์

<div ng-app ng-controller="MyCtrl">
  <select ng-model="referral.organization" ng-options="c for c in organizations"></select>
</div>

<script type='text/javascript'>
  function MyCtrl($scope) {
    $scope.organizations = ['a', 'b', 'c', 'd', 'e'];
    $scope.referral = {
      organization: $scope.organizations[2]
    };
  }
</script>

จะเกิดอะไรขึ้นถ้าฉันมีรายการแบบหล่นลงซึ่งเป็นแบบเลือกหลายรายการ การตั้งค่ารหัสในแบบจำลองไม่ทำงาน
Nikhil Sahu

2

วิธีง่ายๆ

หากคุณมีผู้ใช้เป็นการตอบสนองหรือ Array / JSON ที่คุณกำหนดไว้อันดับแรกคุณต้องตั้งค่าที่เลือกในคอนโทรลเลอร์จากนั้นคุณใส่ชื่อรุ่นเดียวกันใน html ตัวอย่างนี้ฉันเขียนเพื่ออธิบายในวิธีที่ง่ายที่สุด
ตัวอย่างง่ายๆ
ภายในคอนโทรลเลอร์:

$scope.Users = ["Suresh","Mahesh","Ramesh"]; 
$scope.selectedUser = $scope.Users[0];

HTML ของคุณ

<select data-ng-options="usr for usr in Users" data-ng-model="selectedUser">
</select>

ตัวอย่างที่ซับซ้อน
Inside Controller:

$scope.JSON = {
       "ResponseObject":
           [{
               "Name": "Suresh",
               "userID": 1
           },
           {
               "Name": "Mahesh",
               "userID": 2
           }]
   };
   $scope.selectedUser = $scope.JSON.ResponseObject[0];

HTML ของคุณ

<select data-ng-options="usr.Name for usr in JSON.ResponseObject" data-ng-model="selectedUser"></select>
<h3>You selected: {{selectedUser.Name}}</h3>    

1

มันสามารถเป็นประโยชน์ ปริมาณการผูกไม่ได้ผลเสมอไป

<select id="product" class="form-control" name="product" required
        ng-model="issue.productId"
        ng-change="getProductVersions()"
        ng-options="p.id as p.shortName for p in products">
</select>

ตัวอย่างเช่น. คุณกรอกข้อมูลรุ่นตัวเลือกแหล่งรายการจากบริการส่วนที่เหลือ ค่าที่เลือกเป็นที่รู้จักกันก่อนรายการเติมและได้รับการตั้งค่า หลังจากดำเนินการร้องขอส่วนที่เหลือพร้อมตัวเลือกรายการ $ http แล้วให้ทำ แต่ตัวเลือกที่เลือกไม่ได้ตั้งไว้ ด้วยเหตุผลที่ไม่ทราบสาเหตุ AngularJS ในเงา $ digest ที่กำลังดำเนินการไม่ได้เลือกการเชื่อมต่อเนื่องจากเป็น shuold ฉันต้องใช้ JQuery เพื่อตั้งค่าที่เลือก มันสำคัญนะ! Angular in shadow เพิ่มส่วนนำหน้าให้กับค่าของ attr "value" สำหรับสร้างโดย optinos ของ ng-repeat สำหรับ int มันคือ "number:"

$scope.issue.productId = productId;
function activate() {
   $http.get('/product/list')
     .then(function (response) {
       $scope.products = response.data;

       if (productId) {
           console.log("" + $("#product option").length);//for clarity                       
           $timeout(function () {
               console.log("" + $("#product option").length);//for clarity
               $('#product').val('number:'+productId);
               //$scope.issue.productId = productId;//not work at all
           }, 200);
       }
   });
}

0

ลองทำสิ่งต่อไปนี้:

ไฟล์ JS

this.options = { 
        languages: [{language: 'English', lg:'en'}, {language:'German', lg:'de'}]
};
console.log(signinDetails.language);

ไฟล์ HTML

<div class="form-group col-sm-6">
    <label>Preferred language</label>
    <select class="form-control" name="right" ng-model="signinDetails.language" ng-init="signinDetails.language = options.languages[0]" ng-options="l as l.language for l in options.languages"><option></option>
    </select>
</div>

มีวิธีแก้ปัญหาที่ดีอยู่แล้วซึ่งได้ผลและได้รับการยอมรับจาก OP ว่าสามารถแก้ไขปัญหาของเขาได้
L. Guthardt

0

นี่คือรหัสที่ฉันใช้สำหรับค่าที่เลือกไว้

countryList: any = [{ "value": "AF", "group": "A", "text": "Afghanistan"}, { "value": "AL", "group": "A", "text": "Albania"}, { "value": "DZ", "group": "A", "text": "Algeria"}, { "value": "AD", "group": "A", "text": "Andorra"}, { "value": "AO", "group": "A", "text": "Angola"}, { "value": "AR", "group": "A", "text": "Argentina"}, { "value": "AM", "group": "A", "text": "Armenia"}, { "value": "AW", "group": "A", "text": "Aruba"}, { "value": "AU", "group": "A", "text": "Australia"}, { "value": "AT", "group": "A", "text": "Austria"}, { "value": "AZ", "group": "A", "text": "Azerbaijan"}];
 
 
 for (var j = 0; j < countryList.length; j++) {
      //debugger
      if (countryList[j].text == "Australia") {
          console.log(countryList[j].text); 
          countryList[j].isSelected = 'selected';
      }
      }
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<label>Country</label>
<select class="custom-select col-12" id="Country" name="Country"   >
<option value="0" selected>Choose...</option>
<option *ngFor="let country of countryList" value="{{country.text}}" selected="{{country.isSelected}}"   > {{country.text}}</option>
</select>

ลองทำในกรอบเชิงมุม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.