简体   繁体   English

ng-options和ng-model预选值

[英]ng-options and ng-model preselected value

I'm trying to preselect value with ng-options. 我正在尝试使用ng-options预先选择值。 Here's what 这是什么

 <select ng-model="promocode.PRODUCT" ng-change="getSomething()" ng-options="product as product.NAME for product in products">

The problem is in selected by default value. 该问题在默认值中处于选中状态。 I have promocode.PRODUCT object the same as in ng-options, but angular set default value empty. 我有与ng-options相同的promocode.PRODUCT对象,但是角度设置默认值为空。

Where is my mistake? 我的错误在哪里?

Assuming your products have some kind of id property, this should do the trick: 假设您的产品具有某种id属性,这应该可以解决问题:

 <select ng-model="promocode.PRODUCT"
    ng-change="getSomething()"
    ng-options="product as product.NAME for product in products track by product.id">

track by product.id tells angular to compare array items by their id property, instead of comparing equality between objects. track by product.id告诉angular通过其id属性比较数组项,而不是比较对象之间的相等性。

Here's some more info on tracking / ng-options . 这是有关track / ng-options的更多信息。

And a working example: 还有一个工作示例:

 var myApp = angular.module('myApp', []); myApp.controller("controller", function($scope) { $scope.products = [{ id: 1, name: 'FirstProduct' }, { id: 2, name: 'SecondProduct' }]; $scope.promocode = { product: { // Here I am using a placeholder product to illustrate that id: 2 // the select is identifying the correct row by it's `id`. } }; }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="myApp" ng-controller="controller"> <select ng-model="promocode.product" ng-change="getSomething()" ng-options="product as product.name for product in products track by product.id"> </select> <br/> {{promocode.product}} </div> 

A better option would be to select the correct row, like this: 更好的选择是选择正确的行,如下所示:

$scope.promocode = $scope.products[1];

Then you won't have to duplicate any data. 然后,您将不必重复任何数据。

Assuming product has id property , You need to use select as label group by group for value in array track by trackexpr , Read DOCs 假设product具有id属性 ,则需要使用select as label group by group for value in array track by trackexpr ,读取DOC

 <select ng-model="promocode.PRODUCT"
    ng-change="getSomething()"
    ng-options="product as product.NAME for product in products track by product.ID">
 </select>

jsFiddle

Try this.. 尝试这个..

<select ng-model="promocode.PRODUCT"
    ng-change="getSomething()"
    ng-options="product as product.NAME for product in products track by product.ID">
    <option selected disabled>{{Your default value}}</option>
 </select>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM