0

在最初调用获取项目列表(见下文)之后,我需要选择第一个项目并从我的数据库中获取更多详细信息。因此,在项目加载到我的选择输入后,我需要:

  • 突出显示列表框中的第一项
  • 首先将其传递itemID给 DB 以获取该项目的详细信息。

如何在初始页面加载中完成所有这些操作?

<!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>
4

2 回答 2

0

尝试初始化 $scope.itm

假设我有

 <select ng-model="whatever">
       <option value="hello">bye</option>
       <option value="hello2">..</option>
 </select>

如果你初始化 $scope.whatever = "hello" bye将显示在选择中

于 2019-03-15T12:46:47.247 回答
0

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。

于 2019-03-15T12:57:17.177 回答