如果对象具有该属性,则ng-repeat设置所选值

时间:2014-07-24 05:56:33

标签: angularjs

我还在学习Angular,但这让我烦恼:在文本框中提供项目属性时,如何在下拉组合框中获取选定值? Plunker

如果有人能帮我解决这个问题,我会很感激。

    <pre>
    AssetCode:
    <input type="text" class="form-control" placeholder="Kods" ng-model="assetcode" on-enter="add()">
    <div ng-show="pers_select.chpers">
    Person in charge:
    <select class="form-control input-sm" ng-model="pers_select.takepers" data-ng-options="a.name for a in persons"></select>
    </div>
    </pre>

我不知道怎么把html放在这里才能看到它,但是在plunker中我希望你会看到它很好:)

       $scope.$watch('pers_select', function() {
       console.log($scope.pers_select.takepers);
       if ($scope.pers_select.chpers === true && $scope.pers_select.takepers === null) {
       for (var i in $scope.assets) {
       if ($scope.assets[i].person !== null) {
         $scope.pers_select.takepers = $scope.assets[i].person;
         //somehow assign person value from record to combobox, as selected value
       } else {

       }
     }
   }
 }, true);
 });

更新: 我提供了部分代码,所以我不知道我在那里做了什么。因此,当我选择组合框(未在plunker中显示)参数记录在表中选择时,哪些资产属性需要检查。当代码阅读器读取其ID时,它将被粘贴到AssetCode文本框中并按下回车键。然后组合框出现在我可以分配或删除资产负责人的地方,但我需要做的是,当组合框(人)出现选择值时,其中一个资产负责人(如果有一个) )。

更清楚?

1 个答案:

答案 0 :(得分:1)

如果我理解了您的要求,您可以在输入框中输入John,并在选择框中自动选择John。我希望这是正确的,我不太清楚。

首先,您的add()函数还应包含您要添加的内容:

  <input type="text" class="form-control" placeholder="Kods" ng-model="assetcode" on-enter="add(assetcode)">

现在您拥有了用户名,但在您选择的模型中,您根据$scope.persons数组使用了一个对象。因此,我们必须过滤掉我们想要获得的正确对象,顾名思义,这就是$filter的用途。你必须先将它注入你的控制器。

 $scope.add = function(person){
   $scope.pers_select.chpers = true; //In input(Other field) this is defined as true
   var personObj = $filter('filter')($scope.persons, {name: person});
   $scope.pers_select.takepers = personObj[0];
 };

请参阅此plunker:http://plnkr.co/edit/T5kdx28OFVKNRMitxuwh?p=preview

我在watch pers_select的{​​{1}}函数中并没有完全达到你要达到的目的,但对我而言,整个过程看起来并没有必要。