2017-01-07 11 views
0

Я пытаюсь выполнить нечувствительность к регистру привязки ng-модели к раскрывающемуся динамическому выбору с помощью AngularJS.AngularJS привязка к регистру без привязки к раскрывающемуся списку динамического выбора без изменения значения ng-bind в нижнем или верхнем регистре

, проходя через различные другие relavent ответов из стека через поток, я придумал что-то вроде ниже на взгляде, здесь CASEINSENSITIVE-варианта есть директива, которую я придумал ссылки следующего решения

AngularJS case-insensitive binding to a static select drop-down

HTML:

<select id="dcName" caseinsensitive-options="" ng-model="DC.name" class="form-control"> 
    <option value="">--- Please Select ---</option> 
    <option ng-repeat="dataCenter in inventoryDataCenters" value="{{dataCenter}}">{{dataCenter}}</option> 
</select> 

директива код расслоение плотной:

app.directive('caseinsensitiveOptions', function() { 
    return { 
     restrict: 'A', 
     require: ['ngModel', 'select'], 
     link: function(scope, el, attrs, ctrls) { 
      var ngModel = ctrls[0]; 
      ngModel.$formatters.push(function(value) { 
      var option = [].filter.call(el.children(), function(option) { 
       return option.value.toUpperCase() === value.toUpperCase() 
      })[0]; 
      return option ? option.value : value 
      }); 

     } 
     } 
    }); 

Ожидаемый результат

, когда я что-то передать, как это для $ scope.inventoryDataCenters = [ "TEST1", "test2", TEST3]; и ng-model для DC.name имеет значение TesT1.

Выпадающий список должен показывать TEST1, делая нечувствительный к регистру регистр. Теперь этого не происходит. Вышеупомянутое решение работает идеально, когда у нас есть статическое падение.

вещи, которые необходимо учитывать, что выбор находится внутри DIV, который нг-повторов, как показано ниже

ng-repeat="DC in workflowData.project_data.service_info.variables.service_data['data-center']" 

и нг-модель для выбора DC.name выводится из приведенного выше массива постоянного тока.

+0

почему бы вам не только дезинфицировать данные, а не пытаться заставить рамки для борьбы с ним? Разве не имело бы смысла просто преобразовывать данные в правильный случай в контроллере, прежде чем пытаться назначить его вашей модели? – Claies

+0

Я понимаю, но требование не изменять данные .. любым другим способом сделать это? – nparvez

+0

Я думаю, что исправление модели данных, чтобы ее можно было использовать в контроллере, это не то же самое, что «изменение данных», если только вы не прекратите изменение модели, по какой-то причине ... Вы всегда можете клонировать данные и использовать клон, не оказывая никакого влияния на исходную информацию, все равно было бы лучше, чем пытаться это сделать. – Claies

ответ

0

проверить этот адрес для привязки на основе случае нечувствительны значение

https://jsfiddle.net/dwd2du17/6/

<div ng-app="module" ng-controller="controller as ctrl"> 
<select id="animal" ng-model="ctrl.animal"> 
    <option value="">--- Select ---</option> 
    <option value="CaT">Cat</option> 
    <option value="DOg">Dog</option> 
</select> 
{{ctrl.animal}} 
</div> 


var appForm = angular.module('module', []) 
.controller('controller', function($scope) { 
}); 
+0

Спасибо за ввод ur suhas, но вышеупомянутое решение просто применит фильтр к представлению в верхнем регистре при выпадающем списке, но мне нужно что-то, что может делать без учета регистра без изменения значений. Вышеупомянутое решение просто изменит ситуацию на вид – nparvez