保留在诺言中获得的价值 - 角度

时间:2015-07-10 13:42:01

标签: javascript angularjs

当页面加载时,下拉列表会绑定一些值(例如1,2 ... 7) 根据条件,我想设置其选定的值。在承诺中设置它不起作用。如何解决这个问题。

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;
}]);

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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">

答案 2 :(得分:1)

看起来state = 'k'$scope.SetId,是一个数字,但是options元素的值为5,从"5"评估,这是一个字符串,因为插值{{item.Id}}总是给出一个字符串。

(不是{{ }},实际上并没有在字符串中包含引号,但我只是在这里包含它们以尝试显示数据类型。)

所以你有两个选择。

  1. 使用"5"生成ngOptions元素。以下内容应该有效。

    options
  2. 仅在范围内使用字符串ID。一种快速而肮脏的方法是在将其设置为范围之前将其转换为字符串。

    <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>