2016-02-04 48 views
1

我正在构建一个链接两个下拉菜单的小型Angular(1.5)应用程序。第二个根据第一个下拉菜单更改选项。这一切都很好,期待一个小细节。在HTML选项标签中,属性值等于object:[some number]而不是值本身。显示值(<option></option>标签之间的值)正确显示。检查屏幕截图。我如何使value=""等于它在开始和结束标记之间显示的相同值?ng-options值等于对象而不是值字符串

enter image description here

HTML文件:

<div ng-app="App" ng-controller="app-controller"> 
    <select id="brand" 
    ng-model="input.selected_brand" 
    ng-options="a for (a,b) in data" 
    > 
    <option value="" disabled selected>Selection 1</option> 
    </select> 

    <select id="model" 
    ng-model="input.selected_model" 
    ng-options="a.model for a in input.selected_brand" 
    > 
    <option value="" disabled selected>Selection 2</option> 
    </select> 
</div> 

JS文件:

var App = angular.module("App", []) 
.controller('app-controller',function($scope,$http){ 
    // Fetch JSON data 
    $http.get('data/data.json').then(function(res){ 
    $scope.data = res.data; 
    $scope.selected_brand = $scope.data; 
    }); 
}); 

JSON文件:

{ 
    "BMW" : [ 
    { 
     "model" : "M3 CRT" 
    }, 
    { 
     "model" : "M5" 
    }, 
    { 
     "model" : "M3 GTS" 
    }, 
    { 
     "model" : "M3 Coupe DCT" 
    }, 
    { 
     "model" : "M3 F80" 
    }, 
    { 
     "model" : "M6 Coupe" 
    }, 
    { 
     "model" : "M5/M6 CP" 
    }, 
    { 
     "model" : "X5/X6 M" 
    }, 
    { 
     "model" : "M6 Gran Coupe" 
    }, 
    { 
     "model" : "M3 E30" 
    } 
    ], 
    "Mercedes" : [ 
    { 
     "model" : "SL 65 AMG" 
    }, 
    { 
     "model" : "600 Pullman" 
    }, 
    { 
     "model" : "C111" 
    }, 
    { 
     "model" : "190E 2.5-16 EII" 
    }, 
    { 
     "model" : "SLR McLaren Stirling Moss" 
    }, 
    { 
     "model" : "Patent-Motorwagen" 
    }, 
    { 
     "model" : "500E" 
    }, 
    { 
     "model" : "CLK GTR" 
    }, 
    { 
     "model" : "300 SL" 
    } 
    ], 
    "Lamborghini" : [ 
    { 
     "model" : "Espada" 
    }, 
    { 
     "model" : "Jalpa" 
    }, 
    { 
     "model" : "Urraco" 
    }, 
    { 
     "model" : "Reventon" 
    }, 
    { 
     "model" : "Gallardo" 
    }, 
    { 
     "model" : "Sesto Elemento" 
    }, 
    { 
     "model" : "Diablo" 
    }, 
    { 
     "model" : "Countach" 
    }, 
    { 
     "model" : "Veneno" 
    }, 
    { 
     "model" : "Miura" 
    } 
    ], 
    "Audi" : [ 
    { 
     "model" : "RS2" 
    }, 
    { 
     "model" : "TT" 
    }, 
    { 
     "model" : "Le Mans" 
    }, 
    { 
     "model" : "R18 E-Tron" 
    }, 
    { 
     "model" : "Union Type D" 
    }, 
    { 
     "model" : "RS6 Avant" 
    }, 
    { 
     "model" : "Horch 26/65" 
    }, 
    { 
     "model" : "DKW Monza" 
    }, 
    { 
     "model" : "R8" 
    }, 
    { 
     "model" : "Quattro" 
    } 
    ], 
    "Ford" : [ 
    { 
     "model" : "Mustang Byllitt" 
    }, 
    { 
     "model" : "Boss 429" 
    }, 
    { 
     "model" : "SVT Cobra" 
    }, 
    { 
     "model" : "Fairlane Thunderbolt" 
    }, 
    { 
     "model" : "Focus RS" 
    }, 
    { 
     "model" : "Falcon 351" 
    }, 
    { 
     "model" : "Ford Mustang" 
    }, 
    { 
     "model" : "Cobra R" 
    }, 
    { 
     "model" : "Shelby GT350" 
    }, 
    { 
     "model" : "Ford GT" 
    } 
    ], 
    "Honda" : [ 
    { 
     "model" : "S200 CR" 
    }, 
    { 
     "model" : "Jackson Turbo" 
    }, 
    { 
     "model" : "Accord Coupe" 
    }, 
    { 
     "model" : "Civic Si" 
    }, 
    { 
     "model" : "Prelude VTEC" 
    }, 
    { 
     "model" : "Civic Mugen" 
    } 
    ], 
    "Mazda" : [ 
    { 
     "model" : "Mazda Carol" 
    }, 
    { 
     "model" : "Rotary Pickup" 
    }, 
    { 
     "model" : "Atenza" 
    }, 
    { 
     "model" : "Savanna" 
    }, 
    { 
     "model" : "RX-8" 
    }, 
    { 
     "model" : "Eunos Cosmo" 
    }, 
    { 
     "model" : "Autozam AZ-1" 
    }, 
    { 
     "model" : "Cosmo L10B" 
    }, 
    { 
     "model" : "MX-5 Miata" 
    }, 
    { 
     "model" : "RX-7" 
    } 
    ] 
} 

我之所以走线槽,这是因为我有

$scope.submit = function(input){ 
    $scope.input_data = angular.copy(input); 
    console.log($scope.input_data); 
    } 

这就需要正确的价值观才能正常工作,在当前状态下的console.log输出看起来是这样的:

Object { selected_brand: Array[10], selected_model: Object } 
+0

angular使用内部语法设置值,因此它可以正确绑定到模型 – charlietfl

+0

@charlietfl,但'$ scope.input_data = angular.copy(input)'获取数组作为第一个输入值,并将Object作为第二个输入值而不是字符串值。我该如何解决? – Kunok

回答

1

我相信你想要做的是:

<select id="brand" 
    ng-model="input.selected_brand" 
    ng-options="a as a for (a,b) in data" 
    > 
    <option value="" disabled selected>Selection 1</option> 
    </select> 

    <select id="model" 
    ng-model="input.selected_model" 
    ng-options="a.model as a.model for a in data[input.selected_brand]" 
    > 
    <option value="" disabled selected>Selection 2</option> 
    </select> 

而且,您不必担心生成的代码中的值,因为angularjs在内部使用它来创建一些引用。真正重要的是传递给模型的实际价值。

+0

'ng-options =“as a b for(a,b)in data”>'在我的下拉菜单中给了我很多对象,而不是要选择的值。我之所以这么做是因为我有'$ scope.input_data = angular.copy(input)',它将第一个输入作为数组读取,将第二个输入作为对象读取。 (我编辑问题检查,问题的底部)。 – Kunok

+0

对不起。你想要什么:首先选择:汽车品牌,第二选择:汽车模型。 angularjs的模型应该保持什么? – enapupe

+0

例如,如果您选择BMW品牌和M5车型,我需要它给我2串“宝马”和“M5”。但是,这段代码给了我一个数组和一个对象。 – Kunok