Как установить параметры в методе $ http GET для отправки данных из выпадающего списка Angularjs - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть модальное окно для создания нового объекта (see image). Как вы можете видеть там три формы: 1) простой ввод для создания "Имя";2) Раскрывающийся список «Типы»;3) выпадающий список с «идентификаторами»;Мне нужно получить данные с типами и идентификаторами из БД, и, как я вижу в браузере и журналах, эта часть процесса идет хорошо, но когда я заполняю все формы и пытаюсь их отправить, всегда появляется ошибка,это происходит потому, что на сервере в переменные «Типы» и «Идентификаторы» записываются данные из переменной «Имя», короткими словами он отправляет данные из ввода во все переменные.Это главный вопрос - зачем записывать данные из входных данных во все переменные?Это HTML:

 <tr>
      <td class="collapsing">
        <label>{{localization.common[locale].name}}</label>
      </td>
      <td>
        <input type="text" placeholder="" ng-model="Name">
      </td>
    </tr>              
    <tr ng-controller="VirtualConnectorAddCtrl">
     <td class="collapsing">
       <label>{{localization.common[locale].VTypeID}}</label>
     </td>
    <td>
     <select class="ui dropdown VTypeID" ng-model="VTypeID">
       <option ng-repeat="item in virtualType" value= "'{{item.Id}}'">{{item.Name}}</option>
     </select>
    </td>
    </tr>  
    <tr ng-controller="VirtualConnectorAddCtrl">
      <td class="collapsing">
        <label>{{localization.common[locale].account}}</label>
      </td>
      <td>
       <select class="ui dropdown RunAsId" ng-model="RunAsId">
        <option ng-repeat="list in runAccount" value= "'{{list.RunAsAccountId}}'">{{list.RunAsAccountName}}</option>
      </select>
     </td>
    ....
    <div class="ui button blue" ng-click="createData(modal_id, Name, VTypeID, RunAsId)">{{localization.common[locale].add}}</div>

У меня была такая же проблема с созданием «Учетной записи» (вы можете увидеть на изображении в левом боковом меню: VirtualTypes, Account, VirtualConnectors), и там проблема была около $http params в контроллере

$scope.createData = function (obj, data, extra) {
....
      if ($scope.dictFilter == 'accounts') {
        $http({
                method: 'GET',
                url: appID + '/Insert_Methods.asmx/Insert_RunAsAccount',                    
                params: { name: data, pasword: data}
                }).then(function successCallback(response) {
                        Modals.close(obj)
                        getData();
                    }, function errorCallback(response) {
                    });
                    return;
                } ....

Когда я заменил «пароль: данные» на «пароль: дополнительные», проблема была решена, но с «VirtualConnectors» я не смог найти способ сделать это (все созданиепроцессы инициализируются с помощью функции «createData», и я пытаюсь добавить новый блок к этой функции)

if ($scope.dictFilter == 'virtualConnectors') {
                $http({
                    method: 'GET',
                    url: appID + '/Insert_Methods.asmx/Insert_VirtualConnector',                    
                    params: {name: data, VtypeID: data, RunAsID:data }
                }).then(function successCallback(response) {
                    Modals.close(obj)
                    getData();
                }, function errorCallback(response) {
                    console.log("function createData doesn't callback");
                });
                return;
            }

возможно, это касается параметров, в данном случае их три (на самом деле 4, включая obj) модальные"), но функция принимает только 2 аргумента (фактически 3, включая" ​​obj "), функция работает для других случаев, а в других случаях params не всегда соответствуют аргументам ... В интернете не так много информации о" params ",поэтому я не могу понять логику связывания HTML и контроллера здесь.Очевидно, что в html-файле функции CreateData принимают "modal_id", "Name", "VtypeID" и "RunAsId" в качестве аргументов, поэтому в контроллере эта функция должна быть установлена ​​с аргументами, которые могут принимать такие типы данных (obj, string, string, строка), но есть (obj, data, extra), я пытался изменить аргументы функции в контроллере: $scope.createData = function (obj, data, extra, string) {..., и это не помогает ... Я думаю, что я должен написать другую функцию для этого случая,но какие аргументы я должен привести?И еще одна вещь: правильно ли использовать форму с параметрами, созданными с помощью ng-repeat, для такого случая (когда мне нужно отправить строку, которая является свойством объекта)?

1 Ответ

0 голосов
/ 17 ноября 2018

почему он записывает данные из ввода во все переменные?

Поскольку вы присваиваете data всем свойствам

params: {name: data, VtypeID: data, RunAsID:data }

Вы должны сделать,

$scope.createData = function (modal_id, name, vTypeID, runAsId) {

, а затем:

  if ($scope.dictFilter == 'virtualConnectors') {
            $http({
                method: 'GET',
                url: appID + '/Insert_Methods.asmx/Insert_VirtualConnector',                    
                params: {name: name, VtypeID: vTypeID, RunAsID: runAsId } // <-- Check this line
            }).then(function successCallback(response) {
                Modals.close(obj)
                getData();
            }, function errorCallback(response) {
                console.log("function createData doesn't callback");
            });
            return;
        }

аналогичным образом исправить params для 'accounts'.

Существует несколькоплохие практики в вашем коде:

  1. с использованием ng-controller на каждом <tr> теге.Используйте его на уровне таблицы
  2. Передав modal_id, когда он не используется.
  3. Передав name в вашем случае data в качестве пароля.Нет смысла называть переменную неправильно.ЕСЛИ это name, вы не должны использовать пароль для его ссылки.

Я предлагаю вам проверить свой код у какого-либо эксперта, чтобы избежать "неправильных методов кодирования", которым вы следуете вваш код.

Надеюсь, мой ответ поможет вам :)

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