2015-07-10 69 views
0

当页面加载时,下拉列表与某些值绑定(比如1,2 ... 7) 基于一个条件,我想设置它的选定值。在承诺中设置时,它不起作用。如何解决这个问题。保留在promise中获得的值 - angular

HTML:

<div ng-app="app" ng-controller="Ctrl"> 
<select id="ddlSets" data-ng-model="SetId"> 
    <option value="0">-- Select Set --</option> 
    <option data-ng-repeat="item in Sets" value="{{item.Id}}">{{item.Code}}</option> 
</select> 
</div> 

ctrl.js:

var app = angular.module("app",[]); 
app.controller("ctrl",["$scope","Factory",function($scope,Factory){ 


    var init = function(){ 
     //$scope.Sets = (code here to bind data to the dropdown) 

     var promise = Factory.GetSetId(); 
     promise.then(function (success) { 
      if (success.data == 5) { 
      $scope.SetId = 5; //value isn't set. It remains 0. 
      } 
     }, 
     function (error) { 
     console.log(error); 
     }); 
    } 
    //it works if set here - $scope.SetId = 7; 

      init(); 
    }]); 

factory.js:

app.factory("Factory", ["$http",function ($http) { 
var factory = {}; 
factory.GetSetId = function() { 
     return $http({ 
      url: "http://localhost:12345.asmx/GetSetId", 
      method: "GET" 
     }).success(function (data, status) { 
     }).error(function (data, status) { 
     });   
    } 
return factory; 
}]); 
+0

你可以做一个plunker显示这种行为? –

+0

不知道如何做到承诺/ $ http。如果我只是用代码 – Qwerty

+0

创建一个,如果它实际上没有证明问题,那么它会没问题,那么没有多大意义!如果你被困住了,也许一个单独的SO问题可以帮助你解决问题。 –

回答

2

更改您的HTML以下。在html中使用没有$ scope的范围变量。

<div ng-app="app" ng-controller="Ctrl"> 
<select id="ddlSets" data-ng-model="SetId"> 
    <option value="0">-- Select Set --</option> 
    <option data-ng-repeat="item in Sets" ng-value="{{item.Id}}">{{item.Code}}</option> 
</select> 
</div> 
+0

是的。另外值得注意的是,默认选项不应该有一个值'<选项值=“”> - 选择设置 -' – kiswa

+0

对不起,这是一个错字。问题仍然存在。为什么应该默认没有价值。我也有基于0值的任务。 – Qwerty

+0

使用ng值而不是值。编辑我的答案。 – dhavalcengg

1

你能尝试将值赋给像一个对象的属性:

控制器:

$scope.model = {}; 
var promise = Factory.GetSetId(); 
promise.then(function (success) { 
    if (success.data == 5) { 
    $scope.model.SetId = 5; //update 
    } 
}, 
function (error) { 
console.log(error); 
}); 

模板:

<select id="ddlSets" data-ng-model="model.SetId"> 
+0

刚刚尝试。不工作。 – Qwerty

+0

你有没有提醒这次的价值? –

+0

是警报弹出该值,但未将其设置为下拉菜单 – Qwerty

1

它看起来像$scope.SetId5 ,一个数字,但选项元素的值为"5",从{{item.Id}}评估,这是一个字符串,因为{{ }}的插值总是给出一个字符串。 (不是说"5",实际上并没有在字符串中包含引号,但我只是在这里包含它们来试图显示数据类型)。

所以你有2个选项。

  1. 使用ngOptions来生成options元素。像下面的东西应该工作。

    <select id="ddlSets" data-ng-model="SetId" ng-options="item.Id as item.Code for item in Sets"> 
        <option value="0">-- Select Set --</option> 
    </select> 
    
  2. 只能在范围内使用字符串ID。在将其设置在范围之前,将其转换为字符串是一种快速且肮脏的方法。

    if (success.data == 5) { 
        $scope.SetId = 5 + ''; 
    } 
    
+0

我不认为多数民众赞成在问题,原因,当我说'$ scope.SetId = 7;',承诺之外,它的作品。 – Qwerty

+0

@ Qwerty Ah:我错过了! –

+0

它的'好。这不是我第一次遇到这个问题。我刚刚离开它。我们如何将一个值赋给承诺中的一个变量,并在那之后保留它们。似乎很难。应该这样,工厂代码被写入更改? – Qwerty