基于 REST 响应的动态 HTML 部分
Dynamic HTML partial based on REST response
我有一个正在构建的应用程序,它使用 Angular JS 前端和基于 REST 的 API 后端提供给 MySQL 数据库。从前端到后端进行 REST 调用以填充或检索数据库中的数据。我想在我的 angular JS 前端主页中添加一个下拉 selection 框。我希望 selection 触发对数据库的 REST 调用,以检索特定值并使该值成为动态加载的 html 部分的一部分。
例如,下拉列表会 select 汽车模型(丰田花冠、本田雅阁等)。当您 select 该模型时,控制器会进行 REST 调用到适当的 table(s) 以获取该汽车的其余信息(MPG、尺寸、重量等)。一旦这样做,它将在页面上加载部分 HTML是一个模板 HTML 文件,但包含动态内容。所以加载的页面将是 /#/carInfo?toyotaCorolla。模板部分 html 文件将加载,然后模板上的 tables 将填充来自该 REST 调用的响应。所以我基本上会为该页面有一个模板,但它会根据 selected.
调用页面的新版本
我正在脑海中思考这个问题,但我没有随身携带我的应用程序代码。这个问题不是针对实际的代码解决方案,而是针对某人编写一些伪代码或将我指向与此类似的 demo/example 在线...如果可能的话。我正在自己进行搜索,但我可能正在搜索错误的术语来完成这项工作。任何关于此的指示或帮助将不胜感激。
更新:
现在我回家了,下面是我遇到问题的代码片段。
<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 版本不起作用。
请在下面找到代码片段。希望这会有所帮助
汽车-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"
});
});
类似于:
//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>
我有一个正在构建的应用程序,它使用 Angular JS 前端和基于 REST 的 API 后端提供给 MySQL 数据库。从前端到后端进行 REST 调用以填充或检索数据库中的数据。我想在我的 angular JS 前端主页中添加一个下拉 selection 框。我希望 selection 触发对数据库的 REST 调用,以检索特定值并使该值成为动态加载的 html 部分的一部分。
例如,下拉列表会 select 汽车模型(丰田花冠、本田雅阁等)。当您 select 该模型时,控制器会进行 REST 调用到适当的 table(s) 以获取该汽车的其余信息(MPG、尺寸、重量等)。一旦这样做,它将在页面上加载部分 HTML是一个模板 HTML 文件,但包含动态内容。所以加载的页面将是 /#/carInfo?toyotaCorolla。模板部分 html 文件将加载,然后模板上的 tables 将填充来自该 REST 调用的响应。所以我基本上会为该页面有一个模板,但它会根据 selected.
调用页面的新版本我正在脑海中思考这个问题,但我没有随身携带我的应用程序代码。这个问题不是针对实际的代码解决方案,而是针对某人编写一些伪代码或将我指向与此类似的 demo/example 在线...如果可能的话。我正在自己进行搜索,但我可能正在搜索错误的术语来完成这项工作。任何关于此的指示或帮助将不胜感激。
更新: 现在我回家了,下面是我遇到问题的代码片段。
<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 版本不起作用。
请在下面找到代码片段。希望这会有所帮助
汽车-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"
});
});
类似于:
//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>