2014-01-23 64 views
3

我們正面臨與選擇字段的空選項的多個問題。問題與選擇字段的空選項

我的渲​​染代碼如下:

<select ng-switch-when="select" id="{{field.name}}" ng-model=data[field.name] > 
<option ng-repeat="option in field.options" value="{{option.value}}">{{option.description}} 
</select> 

這裏,我們的用戶界面是動態生成和選項也填充動態使用REST的API。 Select字段綁定到一個數據對象,該對象也使用最初可能具有空值的REST調用填充。

問題

  1. 它會自動添加它不是必需的,選擇任何一個非空選項後消失一個空的選擇。
  2. 此外,它正顯示出一些特定的領域

TypeError: Cannot call method 'prop' of undefined at selectDirective.link.ngModelCtrl.$render (lib/angular/angular.js:20165:47) at Object.ngModelWatch (lib/angular/angular.js:16734:14) at Scope.$get.Scope.$digest (lib/angular/angular.js:11800:40) at Scope.$get.Scope.$apply (lib/angular/angular.js:12061:24) at done (lib/angular/angular.js:7843:45) at completeRequest (lib/angular/angular.js:8026:7) at XMLHttpRequest.xhr.onreadystatechange (lib/angular/angular.js:7982:11)

我懷疑是使用下面的角度

function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) { 
ngModelCtrl.$render = function() { 
var viewValue = ngModelCtrl.$viewValue; 

    if (selectCtrl.hasOption(viewValue)) { 
    if (unknownOption.parent()) unknownOption.remove(); 
    selectElement.val(viewValue); 
    if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy 
    } else { 
    if (isUndefined(viewValue) && emptyOption) { 
     selectElement.val(''); 
    } else { 
     selectCtrl.renderUnknownOption(viewValue); 
    } 
    } 

代碼以下錯誤......

,並在打破此行

if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy 

,因爲空白選項在稍後階段由REST API提供,直到初始渲染纔可用。

請提供一些實施建議和一些替代方法。

P.S:我不能在選擇時使用ng-option,因爲它會發出索引值,我需要一些DOM操作的實際值。

回答

1

我會首先閱讀如何執行data-ng選項(http://docs.angularjs.org/api/ng.directive:select),因爲您的選擇會導致一些問題。這裏是你如何可以四處移動你的代碼:

<span data-ng-switch-when="select"> 
    <select id="{{field.name }}" data-ng-model="data[field.name]" data-ng-options="option.value as option.description for option in field.options></select> 
</span> 

其次,選擇空白選項是因爲數據[field.name]未設置爲一個存在於option.value的值的原因。您需要將其設置在控制器中,以便空白選項消失。您可以在此處看到類似的問題:Why does AngularJS include an empty option in select?