我正在构建一个使用Angular JS前端和基于REST的API后端为MySQL数据库提供的应用程序。从前端到后端进行REST调用以填充或检索数据库中的数据。我想在我的角度JS前端主页上添加一个下拉选择框。我希望选择触发对数据库的REST调用,以检索特定值并使该值成为动态加载的html部分的一部分。
例如,下拉菜单会选择汽车模型(Toyota Corolla,Honda Accord等)当您选择该模型时,控制器会对相应的表格进行REST调用以获取该车的其他信息(MPG,大小,重量等)一旦这样做,它将在页面上加载部分HTML,该页面是模板HTML文件但具有动态内容。所以加载的页面是/#/ carInfo?toyotaCorolla。将加载模板部分html文件,然后模板上的表将填充来自该REST调用的响应。所以我基本上只有一个模板用于该页面,但它会根据所选内容调用页面的新版本。
我正在考虑这个问题,而且我的应用程序代码没有。这个问题不是针对实际的代码解决方案,而是针对某人编写一些伪代码或指向我在线的演示/示例,如果它甚至是可能的话。我正在自己进行搜索,但我可能正在寻找错误的术语来完成这项工作。任何指针或帮助都将不胜感激。
更新: 现在我回家了,这里是我遇到问题的代码片段。
<ul class="nav navbar-nav">
<li><a href="#/home" class="mdi-action-home"></a></li>
<li class="dropdown">
<a href="javascript:void(0)" data-target="#" class="dropdown-toggle" data-toggle="dropdown">
Select a car...
<b class="caret"></b></a>
<ul class="dropdown-menu">
<li ng-model="selectedCar.value" ng-repeat="x.car for x in cars"
ng-change="selectedCarChanged()"></li>
</ul>
</li>
</ul>
这不正确填充。我使用ng-options而不是ng-repeat来实现<select>
实现的相同ng代码。我希望这将是一个简单的过渡,但使用列表的CSS版本无效。
答案 0 :(得分:1)
请在下面找到代码段。希望这会有所帮助
轿厢list.html
<div ng-controller="carListController">
<select ng-model="selectedCar" ng-change="onSelectCar(selectedCar)">
<option ng-repeat="car in cars">{{car}}</option>
</select>
</div>
carListController.js
app.controller('carListController', function($scope, $location) {
$scope.carList = ['Honda', 'Toyota', 'Suzuki', 'Hyundai'];
$scope.onSelectCar = function(car) {
$location.path('#/carInfo').search({carInfo: car});
}
});
carInfo.html
<div class="carDetails">
<span>Car Name: {{car.name}}</span>
<span>Car Model: {{car.model}}</span>
<span>Car Year: {{car.year}}</span>
<span>Car Size: {{car.size}}</span>
</div>
carInfoDetailsController.js
app.controller('carInfoController', function($scope, $location, $http) {
$scope.car = {};
$scope.init= function() {
$http.get('url/' + $location.search('carInfo'), function(response) {
$scope.car = response;
});
};
$scope.init();
});
appConfig.js
app.config(function($routeProvider){
$routeProvider.when('/carInfo'{
templateUrl: "carInfo.html",
controller: "carInfoController"
});
});
答案 1 :(得分:1)
类似的东西:
//in a service
(function() {
function MyService($http) {
var myService = {};
MyService.accessMultiTool = function(){
var args = Array.from(arguments);
var method, url, authorization;
args.forEach(function(item){
if('method' in item){
method = item.method;
}else if ('url' in item){
url = item.url;
}else if ('authorization' in item){
authorization = item.authorization;
}
});
delete $http.defaults.headers.common['X-Requested-With'];
return $http({
method: method,
origin: 'http://someclient/',
url: url,
headers: {'Authorization': authorization}
}).error(function(status){generate some error msg});
};
return MyService;
}
angular
.module('myApp')
.factory('MyService', ['$http', MyService]);
})();
//in a controller
(function () {
function MyCtrl(MyService) {
var myController = this;
this.car_model_options = ["Honda", "Chevy", "Ford", "Nissan"];
this.bound_car_model_obj = {
model: null
};
this.getCarModel = function(){
MyService.accessMultiTool({method: 'GET'}, {url: 'http://somebackend/api/cars/' + myController.bound_car_model_obj.model}, {authorization: this.activeMember.auth}).then(function(data){
myController.setCurrCarModel(data);
});
this.setCurrCarModel = function(data){
myController.currently_selected_car_model = data;
};
};
};
angular
.module('myApp')
.controller('MyCtrl', ['MyService', MyCtrl]);
})();
//in a template
<div ng-controller="MyCtrl as mycontroller">
<select data-ng-init="this.bound_car_model_obj.model = mycontroller.car_model_options[0]" data-ng-model="this.bound_car_model_obj.model" data-ng-options="option for option in mycontroller.car_model_options" >
</select>
<table>
<tr ng-repeat="car in mycontroller.currently_selected_car_model>
<td>{{car.someproperty}}>/td>
<td>{{car.someotherproperty}}>/td>
</tr>
</table>
</div>