当页面加载时,下拉列表会绑定一些值(例如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;
}]);
答案 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}}
总是给出一个字符串。
(不是{{ }}
,实际上并没有在字符串中包含引号,但我只是在这里包含它们以尝试显示数据类型。)
所以你有两个选择。
使用"5"
生成ngOptions
元素。以下内容应该有效。
options
仅在范围内使用字符串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>