Javascript 角度-ngModel for<;之前的ngChange触发器;选择>;

Javascript 角度-ngModel for<;之前的ngChange触发器;选择>;,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我找到了一个相关的话题,答案建议关注模型的变化,而不是选择的变化。但在我的示例中,“模型”是列表中对象的一部分。为列表中的每个对象初始化$watch是否正确 选择 <li data-ng-repeat="obj in main.list track by $index"> <select data-ng-change="main.changeStatus(obj)" data-ng-model="obj.status"> <option val

我找到了一个相关的话题,答案建议关注模型的变化,而不是选择的变化。但在我的示例中,“模型”是列表中对象的一部分。为列表中的每个对象初始化
$watch
是否正确

选择

 <li data-ng-repeat="obj in main.list track by $index">
    <select data-ng-change="main.changeStatus(obj)" data-ng-model="obj.status">
      <option value="A">A</option>
      <option value="B">B</option>
      <option value="C">C</option>
    </select>
 </li>
解决这个问题的正确方法是什么

谢谢

编辑:我想我没有问正确的问题。

发布的代码没有达到我想要的效果,因为更改方法在模型更新之前执行,因此我将不正确/旧的对象发送到后端。现在有几种方法可以解决这个问题

  • 创建一个新变量并将其用作模型
  • 遍历对象列表并查看每个状态属性
  • 另一种对我来说不知道的方式
理想情况下,我将新对象添加到change方法中,但我不知道如何实现


Edit2:我试着写一把小提琴来表达清楚,但它在那里起作用了。我需要更深入地研究我的代码,因为问题似乎在其他地方。

让我们澄清你的问题,你有5个下拉列表, 每个选项都有3个选项a、b、c, 你想用一种清晰的方式做什么?
如果您说“更新对象或已在更改中接收到正确的对象”是指main.list中的list对象,那么您的代码就可以了。

您可以这样做。主要区别在于,当模型以编程方式更改时,不会触发ng更改,它只会对输入值更改作出反应。确定,但是对象只会通过更改,因此您的建议意味着我需要对列表中的每个“status”属性初始化$watch?我更新了我的问题。使用,我想更改当前对象的“状态”属性。我将对象传递给“change”方法,但传递对象的“status”仍然是旧值。我想可能我无法将对象传递给方法,并尝试从列表中读取它,但列表中的对象也没有更新。这意味着“change”方法在对象的模型(状态)更改之前执行。但是我需要更改方法中的更新对象来更新数据库。我的朋友,尝试使用ng options指令简单的docs to learn在这里,您只能通过同时传递obj和obj.status来设置obj的状态,而不是在ng change中设置为obj.status=obj.status[来自ng模型],我的意思是,您只能在代码中更改视图,您可以在控制器中的ng change方法中设置状态
main.changeStatus = function(obj) {
  var r = new Resource(obj);
  ...
  r.$save({...}, function (savedObj) {
    ...
  });
}