var item = $.grep($scope.metaData.modes, function (x) { return x.modeId === mode; })[0];But it might be a bit slower since it searches the whole array for multiple matches.
> <div class="form-group"> > <label class="control-label col-md-3" title="Mode">Mode:</label> > <div class="controls"> > <div class="col-lg-9"> > <select class="form-control" ng-model="currentSalespoint.mode" required name="mode" id="mode" > ng-options="t.modeId as t.description for t in metaData.modes" > ng-change="modeChanged(currentSalespoint.mode)"></select> > </div> > <div class="field-validation-error"> > <span ng-show="editSalespointGeneral.mode.$error.required && editSalespointGeneral.mode.$dirty">Mode is required.</span> > </div> > </div> > </div> > <div class="form-group"> > <label class="control-label col-md-3" title="Type Template">Type Template:</label> > <div class="controls"> > <div class="col-lg-9"> > <select class="form-control" ng-model="currentSalespoint.typeTmplId" > ng-options="s.groupId as s.groupName for s in metaData.salespointTypeGroups"></select> > </div> > </div> > </div> > <div class="form-group" ng-show="salespointMode.needsItemTree"> > <label class="control-label col-md-3" title="Item Tree">Item Tree:</label> > <div class="controls"> > <div class="col-lg-9"> > > <select class="form-control" name="itemTree" id="itemTree" > ng-model="currentSalespoint.iTreeTop" ng-required="salespointMode.needsItemTree" > ng-options="t.id as t.descrip for t in metaData.itemTrees"></select> > </div> > <div class="field-validation-error"> > <span ng-show="editSalespointGeneral.itemTree.$error.required && editSalespointGeneral.itemTree.$dirty">Item Tree selection is required.</span> > </div> > </div>>
> $scope.modeChanged = function (mode) { > setModeProps(mode); > }; > > var setModeProps = function (mode) { > for (var i = 0; i < $scope.metaData.modes.length; i++) { > var curMode = $scope.metaData.modes[i]; > if (curMode.modeId == mode) { > $scope.salespointMode = curMode; > break; > } > } > }; >>
> defaultOption = { > modeId: null, description: 'Select Mode...', abbreviation: '', > needsItemTree: false, needsLocSuffix: false, needsItemTreeHeight: false, > needsLookupMethod: false, needsPassNumberEntry: false, > needsCashDrawerType: false, needsStickyList: false, needsCashThreshold: false, > needsBillCountThreshold: false, needsBalanceTransferAssist: false > }; > $scope.metaData.modes.splice(0, 0, defaultOption);>
<!DOCTYPE html> >><html data-ng-app="MyApp"> >><head> >> <meta name="viewport" content="width=device-width" /> >> <title>Index</title> >></head> >><body data-ng-controller="myCtrl"> >> <div> >> <select data-ng-model="selectedSalespoint" >> data-ng-options="s.name for s in metaData.salesPoint"> >> </select> >> <select data-ng-model="selectedItemTree " >> data-ng-options="s.Descrip for s in metaData.itemTrees"> >> </select> >> </div> >></body> >> >><script src="~/Scripts/angular.js"></script> >><script type="text/javascript"> >> var app = angular.module('MyApp', []); >> >> app.controller('myCtrl', ['$scope', function ($scope) { >> >> $scope.metaData = { >> salesPoint: [{ name: 'A', ItemTreeRequired: true }, { name: 'B', ItemTreeRequired: false }], >> itemTrees : [{ id: 0, Descrip: 'Select Item Tree....' },{ id: 1, Descrip: 'One' }, { id: 2, Descrip: 'Two' }] >> }; >> $scope.selectedSalespoint = null; >> $scope.selectedItemTree = null; >> >> >> var zeroIsOn = true; >> $scope.$watch('selectedSalespoint', function (newValue, oldValue) { >> if (newValue === null) return; >> >> if (newValue.ItemTreeRequired && ! zeroIsOn) { >> $scope.metaData.itemTrees.splice(0, 0, { id: 0, Descrip: 'Select Item Tree....' }); >> zeroIsOn = true; >> } >> else { >> if (zeroIsOn && ! newValue.ItemTreeRequired) { >> $scope.metaData.itemTrees.splice(0, 1); >> zeroIsOn = false; >> } >> } >> }); >> }]); >></script> >></html>Using your approach you'd need something like:
$scope.$watch('selectedItemTree', function(newVal, oldVal) { >> if (! $scope.selectedSalespoint.ItemTreeRequired && newVal.id === 0) { >> alert('Cannot choose that one'); >> } >> });(and also need to watch selectedSalespoint changed and make sure the zero option wasn't currently selected......)