Cách sử dụng tùy chọn ng để đặt giá trị mặc định của phần tử chọn


148

Tôi đã xem tài liệu của chỉ thị chọn Angular tại đây: http://docs.angularjs.org/api/ng.directive:select . Tôi không thể tìm cách đặt giá trị mặc định. Điều này thật khó hiểu:

chọn làm nhãn cho giá trị trong mảng

Đây là đối tượng:

{
    "type": "select", 
    "name": "Service",
    "value": "Service 3", 
    "values": [ "Service 1", "Service 2", "Service 3", "Service 4"] 
}

Html (đang hoạt động):

<select><option ng-repeat="value in prop.values">{{value}}</option></select>

và sau đó tôi đang cố gắng thêm một thuộc tính tùy chọn ng bên trong phần tử select để đặt prop.valuelàm tùy chọn mặc định (không hoạt động).

ng-options="(prop.value) for v in prop.values"

Tôi đang làm gì sai?

Câu trả lời:


131

Vì vậy, giả sử đối tượng đó nằm trong phạm vi của bạn:

<div ng-controller="MyCtrl">
  <select ng-model="prop.value" ng-options="v for v in prop.values">
  </select>
</div>

 

function MyCtrl($scope) {
  $scope.prop = {
    "type": "select", 
    "name": "Service",
    "value": "Service 3", 
    "values": [ "Service 1", "Service 2", "Service 3", "Service 4"] 
  };
}

Làm việc Plunkr: http://plnkr.co/edit/wTRXZYEPrZJRizEltQ2g


2
ok tôi hiểu rồi sự ng-optionthay thế <option ng-repeat="value in prop.values">{{value}}</option>một lần nữa là lời cảm ơn
François Romain

2
Phải có một cách đơn giản hơn để làm điều này, tôi thấy điều này rất phức tạp đối với một giá trị mặc định chọn đơn giản trong js góc
Edmund Rojas

1
Chỉ thị ng-tùy chọn hơi phức tạp và khó hiểu về cú pháp của nó. Tôi nghĩ rằng sự linh hoạt để ràng buộc các đối tượng đã làm cho nó một chút phức tạp. Cách tôi cố gắng ghi nhớ điều này là bất cứ khi nào tôi đang sử dụng một đối tượng, tôi chỉ rõ một cách rõ ràng những thuộc tính nào sẽ sử dụng cho các thuộc tính giá trị / văn bản của điều khiển chọn. Để biết thêm thông tin, hãy xem điều này: ozkary.com/2015/08/angularjs-ngoption-directive-simplified.html
ozkary

2
nếu bạn muốn tạo một lựa chọn trong chế độ xem mà không cần viết ra các tùy chọn và có một lựa chọn<select ng-model="limit" value="10" ng-options="v for v in [5,10,15,20,30,50]"></select>
vào

1
@james Kleeh .. bạn đang mã hóa tùy chọn đầu tiên vì bạn biết chúng. Nhưng nếu chúng ta không biết các tùy chọn và làm thế nào chúng ta có thể hiển thị cái đầu tiên theo mặc định?
H Varma

69

Các tài liệu góc cho chọn * không trả lời câu hỏi này một cách rõ ràng, nhưng nó là ở đó. Nếu bạn nhìn vào script.js, bạn sẽ thấy điều này:

function MyCntrl($scope) {
  $scope.colors = [
    {name:'black', shade:'dark'},
    {name:'white', shade:'light'},
    {name:'red', shade:'dark'},
    {name:'blue', shade:'dark'},
    {name:'yellow', shade:'light'}
  ];
  $scope.color = $scope.colors[2]; // Default the color to red
}

Đây là html:

<select ng-model="color" ng-options="c.name for c in colors"></select>

Điều này dường như là một cách rõ ràng hơn của mặc định một giá trị được lựa chọn trên một <select>với ng-options. Ngoài ra, nó sẽ hoạt động nếu bạn có nhãn / giá trị khác nhau.

* Đây là từ Angular 1.2.7


Điều này làm việc cho tôi, tôi nghi ngờ điều này sẽ xuất hiện trở lại nhưng tôi hiện đang sử dụng AngularJS v1.2.27 trong trường hợp bất kỳ ai tìm thấy điều này và đang tự hỏi về khả năng tương thích.
Robert Cadmire

41

Câu trả lời này hữu ích hơn khi bạn mang dữ liệu từ DB, thực hiện sửa đổi và sau đó duy trì các thay đổi.

 <select  ng-options="opt.id as opt.name for opt in users" ng-model="selectedUser"></select>

Kiểm tra ví dụ ở đây:

http://plnkr.co/edit/HrT5vUMJOtP9esGngbIV


Cuối cùng một câu trả lời làm việc ở đây, nâng cao! Ngoài ra với giải pháp này, bạn có thể có tùy chọn không xác định làm việc đúng cách. <tùy chọn giá trị = ""> Vui lòng chọn </ tùy chọn>
DDD

Rất vui vì bài đăng này tồn tại, tôi đã tìm kiếm một giải pháp và bài này đã giải quyết được vấn đề của tôi.
slee423

22
<select name='partyid' id="partyid" class='span3'>
<option value=''>Select Party</option>
<option ng-repeat="item in partyName" value="{{item._id}}" ng-selected="obj.partyname == item.partyname">{{item.partyname}}
</option>
</select>

5
Thực hành tồi ở đây ... Hãy xem ghi chú màu vàng thứ hai: docs.angularjs.org/api/ng/directive/select .
M'sieur Toph '

Điều này sẽ không hiệu quả, ví dụ. Khi bạn cố gắng chỉnh sửa bản ghi, bản ghi sẽ liên kết với trường như thế nào?
Windmaomao 11/2/2015

21

Nếu mảng đối tượng của bạn phức tạp như:

$scope.friends = [{ name: John , uuid: 1234}, {name: Joe, uuid, 5678}];

Và mô hình hiện tại của bạn đã được đặt thành một cái gì đó như:

$scope.user.friend = {name:John, uuid: 1234};

Nó đã giúp sử dụng track bychức năng trên uuid (hoặc bất kỳ trường duy nhất nào), miễn là ng-model = "user.friend" cũng có uuid:

<select ng-model="user.friend" 
ng-options="friend as friend.name for friend in friends track by friend.uuid"> 
</select>

Câu trả lời này làm cho ngày của tôi! Ngoài ra hãy xem theo dõi trong tài liệu này: docs.angularjs.org/api/ng/directive/ngOptions
Arashsoft

Đây là câu trả lời tốt nhất!
Gerfried

10

Tôi đã vật lộn với điều này trong một vài giờ, vì vậy tôi muốn thêm một số giải thích cho nó, tất cả các ví dụ được lưu ý ở đây, đề cập đến các trường hợp dữ liệu được tải từ chính tập lệnh, không phải thứ gì đó đến từ dịch vụ hoặc cơ sở dữ liệu, vì vậy tôi muốn cung cấp kinh nghiệm của mình cho bất cứ ai có cùng vấn đề như tôi đã làm.

Thông thường bạn chỉ lưu id của tùy chọn mong muốn trong cơ sở dữ liệu của mình, vì vậy ... hãy hiển thị nó

dịch vụ

myApp.factory('Models', function($http) {
var models = {};
models.allModels = function(options) {
    return $http.post(url_service, {options: options});
};

return models;
});

control.js

myApp.controller('exampleController', function($scope, Models) {
$scope.mainObj={id_main: 1, id_model: 101};
$scope.selected_model = $scope.mainObj.id_model;
Models.allModels({}).success(function(data) {
    $scope.models = data; 
});
});

Cuối cùng là mô hình html một phần.html

Model: <select ng-model="selected_model" 
ng-options="model.id_model as model.name for model in models" ></select>

về cơ bản tôi muốn chỉ ra đoạn đó " model.id_model là model.name cho mô hình trong các mô hình ", " model.id_model " sử dụng id của mô hình cho giá trị để bạn có thể khớp với " mainObj.id_model ". các " selected_model ", đây chỉ là một giá trị đơn giản, cũng " như model.name " là nhãn cho repeater, cuối cùng " mô hình trong mô hình " chỉ là chu kỳ bình thường mà tất cả chúng ta biết về.

Hy vọng điều này sẽ giúp được ai đó, và nếu có, xin hãy bỏ phiếu: D


1
bạn chỉ có thể liên kết lựa chọn với mainObj.id_modeltrực tiếp ( ng-model="mainObj.id_model"), thay vì sử dụng biến 'giữ chỗ / giá trị đơn giản'selected_model
drzaus

vâng, thực sự, tôi chỉ muốn chứng minh rằng nó có thể được thực hiện với một giá trị trực tiếp trong phạm vi $, nhưng cảm ơn vì đã chỉ ra điều đó.
Wiston Coronell

Có thể liên kết với một đối tượng và không chỉ là một int? Tôi không thể lấy nGoptions của mình để đặt mục đã chọn vì nó không biết cách liên kết {id: 24} của tôi với [{id: 23}, {id: 24}, {id: 25}].
Victorio Berra

bạn luôn có thể sử dụng $ index để có được vị trí, tuy nhiên, vâng, có thể liên kết với một đối tượng
Wiston Coronell 3/03/2015

10
<select id="itemDescFormId" name="itemDescFormId" size="1" ng-model="prop" ng-change="update()">
    <option value="">English(EN)</option>
    <option value="23">Corsican(CO)</option>
    <option value="43">French(FR)</option>
    <option value="16">German(GR)</option>

Chỉ cần thêm tùy chọn với giá trị trống. Nó sẽ làm việc.

DEMO Plnkr


Nó thực sự hoạt động nếu bạn thêm một cái gì đó như<option value="" disabled>Please Select</option>
fWd82

9

Một cách dễ dàng hơn để làm điều đó là sử dụng data-ng-init như thế này:

<select data-ng-init="somethingHere = options[0]" data-ng-model="somethingHere" data-ng-options="option.name for option in options"></select>

Sự khác biệt chính ở đây là bạn sẽ cần bao gồm data-ng-model


3
Như được chỉ định trong các tài liệu: Việc sử dụng ngInit thích hợp duy nhất là cho các thuộc tính đặc biệt của ngRepeat, như được thấy trong bản demo bên dưới. Bên cạnh trường hợp này, bạn nên sử dụng bộ điều khiển thay vì ngInit để khởi tạo giá trị trên một phạm vi.
dùng12121234

1
Cách tôi đăng, với ng-tùy chọn dễ dàng và cụ thể hơn nhiều. Cả hai cách làm việc.
Wyetro

3

Các ng mô hình thuộc tính thiết lập tùy chọn lựa chọn và cũng cho phép bạn ống một bộ lọc như orderBy: orderModel.value

index.html

<select ng-model="orderModel" ng-options="option.name for option in orderOptions"></select>

controllers.js

$scope.orderOptions = [
    {"name":"Newest","value":"age"},
    {"name":"Alphabetical","value":"name"}
];

$scope.orderModel = $scope.orderOptions[0];

1
Hãy thử điều này và tôi thấy angular.js:117 TypeError: a.forEach is not a function. Có suy nghĩ gì không?
nghĩa carmen

1

Nếu bất cứ ai đang chạy vào giá trị mặc định thỉnh thoảng không được điền trên trang trong Chrome, IE 10/11, Firefox - hãy thử thêm thuộc tính này vào trường nhập / chọn của bạn để kiểm tra biến được điền trong HTML, như vậy:

<input data-ng-model="vm.x" data-ng-if="vm.x !== '' && vm.x !== undefined && vm.x !== null" />

0

Thực sự đơn giản nếu bạn không quan tâm đến việc lập chỉ mục các tùy chọn của mình với một số id số.

  1. Khai báo var scope var - people của bạn

    $scope.people= ["", "YOU", "ME"];
  2. Trong DOM của phạm vi trên, tạo đối tượng

    <select ng-model="hired" ng-options = "who for who in people"></select>
  3. Trong bộ điều khiển của bạn, bạn đặt mô hình ng "được thuê".

    $scope.hired = "ME";

Chúc may mắn!!! Nó thực sự dễ dàng!


0

Chỉ để thêm, tôi đã làm một cái gì đó như thế này.

 <select class="form-control" data-ng-model="itemSelect" ng-change="selectedTemplate(itemSelect)" autofocus>
        <option value="undefined" [selected]="itemSelect.Name == undefined" disabled="disabled">Select template...</option>
        <option ng-repeat="itemSelect in templateLists" value="{{itemSelect.ID}}">{{itemSelect.Name}}</option></select>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.