angularjs выделяет первый элемент в выделенном - PullRequest
0 голосов
/ 15 марта 2019

После первоначального звонка, чтобы получить список предметов (см. Ниже), мне нужно получить первый элемент и получить более подробную информацию из моей базы данных.Поэтому после загрузки элементов в мой выбранный вход мне нужно:

  • Выделить первый элемент в списке
  • Передать этот первый 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>

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Ваш 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.

0 голосов
/ 15 марта 2019

Попробуйте инициализировать $ scope.itm

Допустим, у меня есть

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

Если вы инициализируете $ scope.whwhat = "hello" пока будет отображаться в select

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...