rashadb
rashadb

Reputation: 2543

Showing previously selected items in drop down menu

Using angular and angular-xeditable I have a drop down menu with a number of options from which to select in the 'amenities' array.

Once I save the selections from the drop down and saved them, I want to make it possible for the user to come back to the page and edit previously selected items.

HTML:

<select multiple  class="w-select am-dropdown" size="12" data-ng-model="Amenities" 
data-ng-options="amenity.amenity for amenity in amenities" required=""></select>

JS:

$scope.amenities = [{amenity: coffee}, {amenity: beer}, {amenity: parking}];

$scope.Amenities = [];

$scope.selectedAmenities = [coffee, beer];//these are amenities saved in the 
database that I want to be able to show as selected using the editable form

Upvotes: 0

Views: 645

Answers (2)

Josh Lin
Josh Lin

Reputation: 2437

do u mean this?

var m = angular.module('m', []).controller('c', ['$scope',
  function($scope) {
    $scope.avilibleValues = ['a1', 'a2', 'a3', 'a4', 'a5'];
    $scope.selected = [];
    $scope.last = 'a1';
    $scope.selecting = 'a1';
    $scope.select = function(it) {
      console.log('select:' + it);
      $scope.selecting = it;
    };

    $scope.change = function() {
      console.log($scope.last);
      $scope.last && $scope.selected.push($scope.last);
      $scope.last = $scope.selecting;
    };
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="script.js"></script>
<div ng-app="m">
  <div ng-controller="c">
    <div class="row">
      <label>seleted:</label>
      <div>
        <p ng-repeat="it in selected">
          <a ng-click="select(it)">{{it}}</a>
        </p>
        <div>

        </div>
        <div class="row">
          <label>selet</label>
          <select ng-model="selecting" ng-options=" i for i in avilibleValues" ng-change="change()"></select>
        </div>
      </div>
    </div>
    <p>
      selecting:{{selecting}}
      <p>
        selected:{{selected}}
        <p>
          last:{{last}}
          <p>

  </div>
</div>

Upvotes: 1

Lewis Hai
Lewis Hai

Reputation: 1214

Have a case as same as this

Add $scope.$watch to put selected value to $scope.selectedValues as below

$scope.$watch('selectedAmenities ', function (nowSelected) {  
   $scope.selectedValues = [];  
   if (!nowSelected) {  
     return;  
   }  
   angular.forEach(nowSelected, function (val) {  
     $scope.selectedValues.push(val.amenity.toString());  
   });  
 }); 

And then use it like below:

select multiple ng-model="selectedValues" class="w-select am-dropdown" size="12"  >  
   <option ng-repeat="amenity in amenities" value="{{amenity.amenity}}" ng-selected="{{selectedValues.indexOf(amenity.amenity)!=-1}}">{{amenity.amenity}}</option>  
 </select>  

Full code at Plunker

Hope it helps you.

Upvotes: 1

Related Questions