Javascript 保留在promise-angular中获得的值

Javascript 保留在promise-angular中获得的值,javascript,angularjs,Javascript,Angularjs,当页面加载时,下拉列表与一些值绑定,比如1、2…7 根据条件,我想设置它的选定值。当设定在承诺内时,它就不起作用了。如何解决这个问题 html: factory.js: 将您的html更改为以下内容。在html中使用不带$scope的scope变量 <div ng-app="app" ng-controller="Ctrl"> <select id="ddlSets" data-ng-model="SetId"> <option value="0">-

当页面加载时,下拉列表与一些值绑定,比如1、2…7 根据条件,我想设置它的选定值。当设定在承诺内时,它就不起作用了。如何解决这个问题

html:

factory.js:


将您的html更改为以下内容。在html中使用不带$scope的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>

将您的html更改为以下内容。在html中使用不带$scope的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>

您是否可以尝试为对象的属性指定一个值,如:

控制器:

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

您是否可以尝试为对象的属性指定一个值,如:

控制器:

$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">
看起来$scope.SetId是5,一个数字,但是options元素的值是5,从{{item.Id}开始计算,这是一个字符串,因为{{}的插值总是给出一个字符串

不是5,实际上没有在字符串中包含引号,但我只是在这里包含引号,以尝试显示数据类型

所以你有两个选择

使用ngOptions生成选项元素。像下面这样的方法应该可以奏效

<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>
看起来$scope.SetId是5,一个数字,但是options元素的值是5,从{{item.Id}开始计算,这是一个字符串,因为{{}的插值总是给出一个字符串

不是5,实际上没有在字符串中包含引号,但我只是在这里包含引号,以尝试显示数据类型

所以你有两个选择

使用ngOptions生成选项元素。像下面这样的方法应该可以奏效

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


是的。另外值得注意的是,默认选项不应该有值-选择集-抱歉,这是一个打字错误。问题仍然存在。为什么默认值不应该有一个值。我也有基于0值的任务。请使用ng值而不是值。编辑了我的答案,运气不好。如果我手动将其设置在承诺之外,即使没有价值,它也会起作用。那么我怀疑您的承诺没有得到执行。你确定吗?是的。另外值得注意的是,默认选项不应该有值-选择集-抱歉,这是一个打字错误。问题仍然存在。为什么默认值不应该有一个值。我也有基于0值的任务。请使用ng值而不是值。编辑了我的答案,运气不好。如果我手动将其设置在承诺之外,即使没有价值,它也会起作用。那么我怀疑您的承诺没有得到执行。你确定吗?我认为这不是问题所在,因为当我说$scope.SetId=7;,在承诺之外,它是有效的。@Qwerty啊:我错过了!没关系。这不是我第一次面对这种情况。我以前就忘了。我们如何给承诺中的一个变量赋值并在之后保留它们呢。看起来很难。工厂代码的编写方式应该改变吗???我不认为这是问题所在,因为当我说$scope.SetId=7;,在承诺之外,它是有效的。@Qwerty啊:我错过了!没关系。这不是我第一次面对这种情况。我以前就忘了。我们如何给承诺中的一个变量赋值并在之后保留它们呢。看起来很难。是否应该更改工厂代码的编写方式???您可以制作一个显示这种行为的plunker吗?不知道如何使用promise/$http实现。如果我只是用代码创建一个就可以了吗?如果它实际上没有演示这个问题,那么就没有什么意义了!如果你陷入困境,也许一个单独的SO问题可以帮助你解决这个问题。我通过编写{{item.Code}}修复了它。你能制作一个显示这种行为的plunker吗?不知道如何使用promise/$http来实现它。如果我只是用代码创建一个就可以了吗?如果它实际上没有演示这个问题,那么就没有什么意义了!如果你被卡住了,也许一个单独的SO问题可以帮助你解决这个问题。我通过编写{item.Code}来修复它。这次你提醒过这个值了吗?是的,提醒会弹出这个值,但它没有设置为下拉列表中的选定值。你可以在页面上打印它{model.SetId},以测试这个值是否真的没有保留,或者选择语法是否正确。如果我打印它,很好。但在下拉列表中未选中。我哪里出错了?我想你应该在angular中检查下拉语法,或者尝试在没有ajax的情况下动态选择,或者通过输入框Vlaues更改选择。这次你是否警告该值?是的,警告弹出该值,但它没有设置为下拉列表的选定值。你可以打印它{{model.SetId}在第页上测试值是否真的没有保留或选择语法不正确。如果我打印它,工作正常。但在下拉列表中未选中。我哪里出错了?我想你应该在angular中检查下拉语法,或者尝试不使用ajax的动态选择,或者通过输入框vlaue更改选择