2016-10-24 3 views
1

wählen verwende ich ein Beispiel aus Angular Dokumentation: https://docs.angularjs.org/api/ng/directive/select
„Verwendung ngValue das Modell zu einer Anordnung von Objekten zu binden, " Sektion.„[object Object]“ anstelle von Objekt übergeben wird für <select> bis ng-Modell, wenn ich eine Option mit Object

index.html:

<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Example - example-select-ngvalue-production</title> 


    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
    <script src="app.js"></script> 



</head> 
<body ng-app="ngvalueSelect"> 
    <div ng-controller="ExampleController"> 
    <form name="myForm"> 
    <label for="ngvalueselect"> ngvalue select: </label> 
    <select size="6" name="ngvalueselect" ng-model="data.model" multiple> 
     <option ng-repeat="option in data.availableOptions" ng-value="option.value">{{option.name}}</option> 
    </select> 
    </form> 
    <hr> 
    <pre>model = {{data.model | json}}</pre><br/> 
</div> 
</body> 
</html> 

app.js:

(function(angular) { 
    'use strict'; 
angular.module('ngvalueSelect', []) 
    .controller('ExampleController', ['$scope', function($scope) { 
    $scope.data = { 
    model: null, 
    availableOptions: [ 
      {value: 'myString', name: 'string'}, 
      {value: 1, name: 'integer'}, 
      {value: true, name: 'boolean'}, 
      {value: null, name: 'null'}, 
      {value: {prop: 'value'}, name: 'object'}, 
      {value: ['a'], name: 'array'} 
    ] 
    }; 
}]); 
})(window.angular); 

Plunker: https://plnkr.co/edit/aHgqeK1pQHS5zfiIjyZv?p=preview

Das Problem: Jeder <option> Objekt darstellt. Ich wähle ein Objekt und "[Object Object]" wird dem ng-Modell von <select> anstelle von object zugewiesen.

Angular empfiehlt, ng-Optionen anstelle von Repeater mit Optionen zu verwenden, aber ich muss einige zusätzliche Logik für jede Option wie ng-style verwenden (unterschiedlich für jede Option).

Die Frage ist: Wie Objekt als Objekt anstelle von String in ng-Modell von <select> übergeben werden, wenn Benutzer eine Option aus auswählen.

+0

Es ist eigentlich ziemlich interessant, da die Standard-Plunker von Angular docs Seite nicht funktioniert, aber wenn Sie script src dem einen, verwendet auf docs Seite ändern (https : //docs.angularjs.org/angular.min.js), es funktioniert perfekt. – table

+0

Sie haben Recht. Es sieht so aus, als ob sie eine unterschiedliche eckige Version in Dokumenten verwenden, verglichen mit dem, was sie für die Verteilung veröffentlichen. –

+0

Es ist ziemlich interessant: Die letzte veröffentlichte eckige '1.x' Version ist' v1.5.8', aber für eckige Dokumente 'v1.5.9-build.5079 + sa.eeb9ef0' wird verwendet. –

Antwort

1

Warum nicht ng-options?

<select size="6" name="ngvalueselect" ng-model="data.model" ng-options="item.value as item.name for item in data.availableOptions" multiple></select> 

Arbeiten Plunker https://plnkr.co/edit/zVzTI6sR6LywC9vcZRkn

+0

Da use diese Liste für Schriftarten verwenden möchten, muss ich ng-style mit font-family für jede Option festlegen. –

+0

Ist das, was Sie wollten https://plnrkr.co/edit/zVzTI6sR6LywC9vcZRkn? – gauss

+0

Nicht genau. Ich muss für jedes Optionselement einen anderen ng-Stil verwenden. Was die Farben anbelangt, so ist jede Zeile in der Liste mit einer anderen Farbe gefärbt. –

-4

$ (this) .find (": ausgewählt"). Daten ("value")

<form name="myForm"> 
    <label for="ngvalueselect"> ngvalue select: </label> 
    <select size="6" name="ngvalueselect" ng-model="data.model" multiple> 
     <option ng-repeat="option in data.availableOptions" data-option="{{option.value}}">{{option.name}}</option> 
    </select> 
    </form> 
    <hr> 
    <pre>model = {{data.model | json}}</pre><br/> 
</div> 
</body> 
</html> 

und wenn jquery Verwendung:

$(document).on("change","select",function(){ 
    var objectOrStringReturend = $(this).find(":selected").data("value"); 
}); 
+0

Die Frage bezieht sich auf ein Angular-Problem - das Hinzufügen eines On-Change-Handlers über jQuery (außerhalb einer Direktive) ist nicht sehr "eckig", weshalb diese Antwort wahrscheinlich abgelehnt wird. Angular und jQuery sind sehr unterschiedliche Bestien. – Brian

0

Ich glaube, Ihre Auswahl sollte in etwa so aussehen:

<select size="6" name="ngvalueselect" ng-model="data.model" ng-options="option.value as option.name for option in data.availableOptions" multiple> 

So sollte es nicht sein, jede einzelne Option Artikel

Verwandte Themen