使用ng-options和ng-selected更新模型

4
我将尝试使用ng-options从下拉菜单中更新一个模型,并使用ng-selected选择已选值。这里是一个简化的示例(和fiddle)。
HTML
<div ng-app>
  <h2>Todo</h2>
  <div ng-controller="QuarterController">
    <select name="quarter" ng-model="Quarter.id" ng-options="q.id as q.val for q in Quarters">
      <option ng-selected="Quarter.val===q.val"></option>
    </select>
    <input type="button" name="Submit" value="Submit" ng-click="submit()"/>
    <br/>
    <p>{{answer}}</p>
  </div>
</div>

Angular

function QuarterController($scope) {
    $scope.Quarters = [{val: 'Q1', id: 1}, {val: 'Q2', id:2}, {val:'Q3', id:3}, {val:'Q4', id:4}];
    $scope.Quarter = {val: 'Q2', id: 2, extraField: 'Hello'};

    $scope.submit = function() {
        $scope.answer = "Val: " + $scope.Quarter.val + ", Id: " + $scope.Quarter.id + $scope.Quarter.extraField;
    };
}

这里发生的情况是下拉选项是来自于$scope.Quarters中的“val”,所选选项的id保存在$scope.Quarter.id中。“submit”显示来自$scope.Quarter的id和val。$scope.Quarter.id在提交时会更新,但$scope.Quarter.val不会更新。有人知道如何解决这个问题吗?
编辑
添加了$scope.Quarter.extraField以更好地说明我要解决的问题。我需要更新id和val,但我希望extraField保持不变。
1个回答

2

您的选择指令中有小错误,请参见此处

视图:

待办事项

  <div ng-controller="QuarterController">
    <select name="quarter" ng-model="Quarter" ng-options="q.val for q in Quarters">
        <option value="">{{Quarter.val}}</option>
    </select>
      <input type="button" name="Submit" value="Submit" ng-click="submit()"/>
      <br/>
      <p>{{answer}}</p>

  </div>
</div>

JS:

function QuarterController($scope) {
    $scope.Quarters = [{
        val: 'Q1',
        id: 1
    }, {
        val: 'Q2',
        id: 2
    }, {
        val: 'Q3',
        id: 3
    }, {
        val: 'Q4',
        id: 4
    }];
    $scope.Quarter = {
        val: 'Q2',
        id: 2
    };

    $scope.submit = function () {
        $scope.answer = "Val: " + $scope.Quarter.val + ", Id: " + $scope.Quarter.id;
    };
}

谢谢,你正确地回答了我提出的问题。现在让我扩展到我现在知道我应该问的问题。我想要更新$scope.Quarter.val和$scope.Quarter.id,但是我希望$scope.Quarter.extraField保持不变,无论选择什么。这是一个更新后的fiddle(你的)http://jsfiddle.net/xpjaD/14/,以及http://jsfiddle.net/xpjaD/15/(我的)。请注意,id会在我的上面更新,而extraField保持不变。 - tarrball
嗨,安迪。我有点困惑。这个 filddle jsfiddle.net/xpjaD/15 不是你想要的吗? - sylwester
几乎了。我希望id属性更新(可以),extraField属性保持不变(可以),val属性也更新(不行)。 - tarrball
在这种情况下,您需要稍微改变一下方法,因为“extraFiles不是$scope.Quarters模型的一部分,只需在提交事件中将其添加到Quarter对象中,请参见此处http://jsfiddle.net/xpjaD/17/。 - sylwester

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接