如何设置从承诺中获取的DropDown List值,其值取自另一个promise

时间:2015-10-01 15:28:18

标签: angularjs pug angular-promise

我想了解如何在承诺填充后在DropDown列表中成功设置一个值。要设置的值将取自另一个承诺,该承诺将填充具有JSON结构的表单。

在我的特定情况下,发病率如下

下拉列表构建为:

1)HTML模板(Jade)

select(name="inputUserRelationship",
       ng-model="myForm.relationship",
       ng-options="relationshipOption as relationshipOption.value for relationshipOption in relationships track by relationshipOption.id",
       ng-init="myForm.insuredRelationship = relationships[0]")
    option(value="") -- SELECT -- 

2)控制器:

$scope.getRelationTypes = function(){
 HttpSrv.get('api/getRelationTypes/').then(function(results){
    $scope.relationships = results;
 }); };

表单在Controller中填写如下:

$scope.getFormInformation = function(ID){
HttpSrv.get('/api/getFormInfo/' + ID).then(function(results){
  if(results)
  {
    $scope.fillForm(results);
  }
}); };

$scope.fillForm = function(filledFormData){
     $scope.myForm.relationship = filledFormData.relationnshipID; };

这会在我的JS调试控制台上产生以下问题:

  1. 在模型上设置值
  2. 下拉列表保留默认的空值([0])。
  3. 当我尝试更改下拉列表中的选定选项时,它会生成以下JS控制台错误。
  4.   

    TypeError:无法分配给只读属性' id' 9       在setter(vendor.js:42989)       在Lexer.readIdent.token.fn.extend.assign(vendor.js:42424)       在validationErrorKey。$ setViewValue(vendor.js:49629)       在vendor.js:53523       在Scope.promises。$ get.Scope。$ eval(vendor.js:44729)       在Scope.promises。$ get.Scope。$ apply(vendor.js:44827)       在HTMLSelectElement。 (vendor.js:53465)       在HTMLSelectElement.jQuery.event.dispatch(vendor.js:4641)       在HTMLSelectElement.jQuery.event.add.elemData.handle(vendor.js:4309)

    非常感谢任何信息。我已经研究过&测试了 $ scope.apply() $ q 选项,即使我知道他们指向了正确的方向,也没有成功。

    干杯!

1 个答案:

答案 0 :(得分:0)

如果您的$ http API调用以格式返回json:

[{"id":"1", "value":"Dropdown desc"}, {...}, {}] 

您应该设置具有相同结构的对象文字,以将下拉列表设置为特定值,如:

$scope.myForm.relationship = {"id":"1", "value":"Dropdown desc"};