在加载时绑定ng-model中的ng-options(如双向绑定)

时间:2017-06-29 09:50:49

标签: javascript angularjs

情况:

我有以下选择:

<select ng-model="model" ng-options="o as o.name for o in options track by o.code">
    <option value="">- Default -</option>
</select>

我的options数据是这样的:

$scope.options = [{id: 1, code: 'foo', name: 'Foo!'}, {id: 2, code: 'bar', name: 'Bar!'}];

我想做什么:

我希望我的选择具有预先选择的值。我的约束是我只知道我的对象的code属性。在track by符号的帮助下,我可以这样做:

$scope.model = {code: 'bar'};

并且它有效,所选的选择值是“Bar!”

问题:

当我将此数据发送到后端时,我需要发送我的对象的id属性。发送的数据为{code: 'bar'},但不是{id: 2, code: 'bar', name: 'Bar!'}

对我而言,这是正常的行为...因为我存储在我的模型{code: 'bar'}中并且我没有更改所选的值。

结论:

options中存在默认值时,有没有办法告诉AngularJS将model列表中的值复制到model(当使用{匹配时) {1}}符号)?

  

信息:我知道我可以做这样的事情track by(用一些逻辑来确定索引......)但是我想要一些更神奇的东西......如果它可能......:D

2 个答案:

答案 0 :(得分:2)

  

OP Info :我知道我可以做这样的事情$ scope.model = $ scope.options [2](用一些逻辑确定索引...)但是我想更神奇的东西...如果有可能......:D

我的3个物品有3个魔法

魔法1:

$scope.model = $scope.options.filter(function(item) {
  return item.code=== 'bar';
})[0];
<2>魔法2:
app.filter('getById', function() {
  return function(input, id) {
    var i=0, len=input.length;
    for (; i<len; i++) {
      if (+input[i].id == +id) {
        return input[i];
      }
    }
    return null;
  }
});

$scope.model  = $filter('getById')($scope.options, 2);

魔术3

angular.forEach($scope.options, function(option) {
        $scope.model = option.name == "name";
        if($scope.model !=null){break}
    });

答案 1 :(得分:1)

您需要在from pymongo import MongoClient client = MongoClient("localhost", 27017) db = client["tutorial"] employees = db["employees"] employees.insert({"name": "Lucas Hightower", 'gender':'m', 'phone':'520-555-1212', 'age':8}) cursor = employees.find() for employee in cursor: print(employee) 上添加ng-change,然后创建一个函数来查找所选选项及其对应的JSON模型。使用此

HTML

<select>

CONTROLLER

<div ng-app='app' ng-controller='mainCtrl'>
    <select ng-model="model" ng-options="o as o.name for o in options track by o.code" 
    ng-change='getValue(this)'>
    <option value="">- Default -</option>
</select>
</div>

每当您在angular.module('app',['QuickList']).controller('mainCtrl', function($scope){ $scope.options = [{id: 1, code: 'foo', name: 'Foo!'}, {id: 2, code: 'bar', name: 'Bar!'}]; $scope.model = {code: 'bar'}; $scope.getValue = function(item){ console.log($scope.selectedOption = item.model); } }); 框中选择该选项时,您将在控制台中看到该选项的实际JSON对象。

这是工作JSFIDDLE