1

Suppose some widget like range slider binds to a 2-element array. Also I want to display range limits in separate text fields. How to accomplish that?

 angular
        .module('myApp', ['ui.slider']);
        
		angular.module('myApp')
    			 .controller('MyController', MyController);
           
    function MyController() {
    		var vm = this;
        
        vm.slider = [5,15];
    }
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<script src="http://angular-ui.github.io/ui-slider/src/slider.js"></script>

<body ng-app="myApp">
    <div ng-controller="MyController as vm">
      		<strong>Range slider:</strong>
		      <div ui-slider="{range: true}" min="1" max="20" step="1" ng-model="vm.slider"></div>
          <strong>It's value is bound as an array:</strong><br>
		      <input type="text" ng-model="vm.slider" /><br>
          <strong>How to bind sepately:</strong><br>
		      From: <input type="text" ng-model="vm.sliderfrom" /> To: <input type="text" ng-model="vm.sliderto" /><br>
    </div>
</body>

I need to update array on each limit change and reverse. How to accomplish that?

0

1 Answer 1

1

You can directly bind with array elements

From: <input type="text" ng-model="vm.slider[0]" />
To: <input type="text" ng-model="vm.slider[1]" />

angular
  .module('myApp', ['ui.slider']);

angular.module('myApp')
  .controller('MyController', MyController);

function MyController() {
  var vm = this;
  vm.slider = [5, 15];
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.10.4/jquery-ui.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<script src="http://angular-ui.github.io/ui-slider/src/slider.js"></script>

<body ng-app="myApp">
  <div ng-controller="MyController as vm">
    <strong>Range slider:</strong>
    <div ui-slider="{range: true}" min="1" max="20" step="1" ng-model="vm.slider"></div>
    <strong>It's value is bound as an array:</strong>
    <br>
    <input type="text" ng-model="vm.slider" />
    <br>
    <strong>How to bind sepately:</strong>
    <br>From:
    <input type="text" ng-model="vm.slider[0]" />To:
    <input type="text" ng-model="vm.slider[1]" />
    <br>
  </div>
</body>

Sign up to request clarification or add additional context in comments.

3 Comments

Array text field is not updated if upper limit text field changed, see: i.imgur.com/fEVwPm3.jpg
@Dims, Its due to input initially vm.slider is binded using the toString() method i.e. [5, 15].toString() which will bind 5,15 later its not converted to array its plain text
So is it possible to fix?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.