angularjs 突出显示 select 中的第一项
angularjs highlight the first item in select
在初始调用以获取项目列表(见下文)后,我需要获取 select 第一个项目并从我的数据库中获取更多详细信息。因此,在项目加载到我的 select 输入后,我需要:
- 突出显示列表框中的第一项
- 将第一个
itemID
传递给数据库以获取该项目的详细信息。
如何在初始页面加载时执行所有这些操作?
<!DOCTYPE html>
<html>
<head>
<script src="Scripts/angular.js"></script>
<script src="Scripts/angular-resource.js"></script>
<script>
var IM_Mod_app = angular.module('IM_ng_app', []);
IM_Mod_app.controller("IM_Ctrl", function ($scope, $http) {
var PlaId = "DFC";
$http({
method: 'GET',
url: 'http://xxx/api/ItemMaintenance/GetAllFilteredItems',
params: { PlaId: PlaId }
}).then(function successCallback(response) {
$scope.items = response.data;
}, function errorCallback(response) { });
});
</script>
</head>
<body ng-app="IM_ng_app">
<table ng-controller="IM_Ctrl">
<tr>
<td>
@*<select ng-model="itm" size="10" ng-options="itm.ITEM_ID for itm in items" ng-class="{selected: $index==0}" ng-change="onItemSelected(itm.ITEM_ID)">*@
@*<select ng-model="itm" size="10" ng-options="itm.ITEM_ID for itm in items track by itm.ITEM_ID" ng-selected="$first" >*@
<select ng-model="itm" size="10" ng-options="itm.ITEM_ID for itm in items track by itm.ITEM_ID" ng-init="items[0].ITEM_ID">
<option value="" ng-if="false"></option>
</select>
</td>
</tr>
</table>
</body>
</html>
尝试初始化 $scope.itm
假设我有
<select ng-model="whatever">
<option value="hello">bye</option>
<option value="hello2">..</option>
</select>
如果初始化$scope.whatever = "hello" bye会显示在select
您的 ng-init
未按预期工作,因为页面加载时您的数组没有任何数据。相反,它必须在任何数据可用之前完成 $http
调用。这只是意味着您需要在 $http
呼叫返回时(在 .then
中)完成您的工作。
您更新后的 AJAX 调用可能如下所示
$http({
method: 'GET',
url: 'http://xxx/api/ItemMaintenance/GetAllFilteredItems',
params: { PlaId: PlaId }
}).then(function successCallback(response) {
$scope.items = response.data;
//Initial the select box
$scope.itm = $scope.items[0];
//Get the details
getSelectedItemDetails();
}, function errorCallback(response) { });
function getSelectedItemDetails() {
$http({}) //whatever API endpoint to get the details
.then(function (response) {
// do something with the data. Maybe extend $scope.itm?
})
}
展望未来,我不鼓励使用 ng-init
。相反,只需在 javascript 中初始化变量的值。由于 angular 的双向绑定,对来自 javascript 的值的任何更新都会使其进入 HTML。
在初始调用以获取项目列表(见下文)后,我需要获取 select 第一个项目并从我的数据库中获取更多详细信息。因此,在项目加载到我的 select 输入后,我需要:
- 突出显示列表框中的第一项
- 将第一个
itemID
传递给数据库以获取该项目的详细信息。
如何在初始页面加载时执行所有这些操作?
<!DOCTYPE html>
<html>
<head>
<script src="Scripts/angular.js"></script>
<script src="Scripts/angular-resource.js"></script>
<script>
var IM_Mod_app = angular.module('IM_ng_app', []);
IM_Mod_app.controller("IM_Ctrl", function ($scope, $http) {
var PlaId = "DFC";
$http({
method: 'GET',
url: 'http://xxx/api/ItemMaintenance/GetAllFilteredItems',
params: { PlaId: PlaId }
}).then(function successCallback(response) {
$scope.items = response.data;
}, function errorCallback(response) { });
});
</script>
</head>
<body ng-app="IM_ng_app">
<table ng-controller="IM_Ctrl">
<tr>
<td>
@*<select ng-model="itm" size="10" ng-options="itm.ITEM_ID for itm in items" ng-class="{selected: $index==0}" ng-change="onItemSelected(itm.ITEM_ID)">*@
@*<select ng-model="itm" size="10" ng-options="itm.ITEM_ID for itm in items track by itm.ITEM_ID" ng-selected="$first" >*@
<select ng-model="itm" size="10" ng-options="itm.ITEM_ID for itm in items track by itm.ITEM_ID" ng-init="items[0].ITEM_ID">
<option value="" ng-if="false"></option>
</select>
</td>
</tr>
</table>
</body>
</html>
尝试初始化 $scope.itm
假设我有
<select ng-model="whatever">
<option value="hello">bye</option>
<option value="hello2">..</option>
</select>
如果初始化$scope.whatever = "hello" bye会显示在select
您的 ng-init
未按预期工作,因为页面加载时您的数组没有任何数据。相反,它必须在任何数据可用之前完成 $http
调用。这只是意味着您需要在 $http
呼叫返回时(在 .then
中)完成您的工作。
您更新后的 AJAX 调用可能如下所示
$http({
method: 'GET',
url: 'http://xxx/api/ItemMaintenance/GetAllFilteredItems',
params: { PlaId: PlaId }
}).then(function successCallback(response) {
$scope.items = response.data;
//Initial the select box
$scope.itm = $scope.items[0];
//Get the details
getSelectedItemDetails();
}, function errorCallback(response) { });
function getSelectedItemDetails() {
$http({}) //whatever API endpoint to get the details
.then(function (response) {
// do something with the data. Maybe extend $scope.itm?
})
}
展望未来,我不鼓励使用 ng-init
。相反,只需在 javascript 中初始化变量的值。由于 angular 的双向绑定,对来自 javascript 的值的任何更新都会使其进入 HTML。