【问题标题】:Angular UI select : using url jsonAngular UI 选择:使用 url json
【发布时间】:2023-03-22 15:45:01
【问题描述】:

我正在尝试从 url 生成的 json 中检索用户列表。我正在尝试以这种方式调整Angular UI select : Fetch data from remote service 上建议的代码:

$scope.person = {};
$scope.people = {};
$http.get('https://sampleurl/pessoas/v1/?nome=' + item.name).then(
    function (response) {
      $scope.people = response.data;
      console.log(response)
    },
    function () {
      console.log('ERROR!!!');
    }
);

但是,输入只是中断,我什至不能在上面输入任何内容:(

由于 json 包含个人数据,我不得不更改真实的 url。

更新 我从 url 中删除了 item.name 并强制为 name 设置一个值。现在我可以得到一些固定的结果,但我无法将它们添加到输入中:

$scope.person = {};
  $scope.people = [];
  //e lá vamos nós
  $http.get('https://someurl/pessoas/v1/?nome=monteiro').then(
    function (response) {
      $scope.people = response.data;
      console.log(response)
    },
    function () {
      console.log('ERROR!!!');
    }
  );

当我选择某人时出现以下错误: 错误:[ngRepeat:dupes] 不允许在转发器中重复。使用“track by”表达式指定唯一键。中继器:$select.selected 中的 $item,重复键:未定义:未定义,重复值:未定义

更新 2:

通过定义对象的所有属性修复了最后一个错误:

$scope.tagTransform = function (newTag) {
    var item = {
        nome: newTag,
        email: 'unknown',
        cpf: 'unknown',
        matricula: 'unknown',
        lotacao: 'unknown'
    };

    return item;
  };

现在我可以选择某人了,但是选择框里面什么都没有。另外,我仍然无法搜索字符串。我试过 https://sampleurl/pessoas/v1/?nome=' + item.name 和 https://sampleurl/pessoas/v1/?nome=' + $selected.search 但都没有成功。

【问题讨论】:

  • 这个 response.data 是一个数组吗?
  • 示例:[{"nome":"dude","matricula":"32107","cpf":"12345678901","email":"dude@SERPRO.GOV.BR", "lotacao":"SUPDE/DERJO/DE701","re​​gional":"SERPRO - REGIONAL RIO DE JANEIRO"},{"nome":"girl","matricula":"46213","cpf":98765432101", "email":"girl@CENTROIN.COM.BR","lotacao":"OPRJO/OPSIN/OPESE","re​​gional":"SERPRO - REGIONAL RIO DE JANEIRO"}];
  • 注意“nome”,是“name”的拼写错误吗?我已编辑我的答案以使用“名称”

标签: javascript angularjs json ui-select


【解决方案1】:

$scope.people = response.data; 更改为$scope.people = response;

【讨论】:

    【解决方案2】:

    假设你有这样的 html,result.data 是一个人的数组。 我有 {{people}} 用于调试目的。它应该显示您在评论中发布的 result.data

    {{people}}
    
    <ui-select multiple ng-model="person" >
       <ui-select-match placeholder="Select person...">{{$select.selected.nome}}</ui-select-match>
       <ui-select-choices repeat="person in people ">
         {{person.nome}}
       </ui-select-choices>
    </ui-select>
    
    $http.get('https://sampleurl/pessoas/v1/?nome=' + item.name).then(
      function (response) {
        $scope.people = response.data;
        console.log(response)
      },
    
      function () {
       console.log('ERROR!!!');
      }
     );
    

    【讨论】:

    • 还是不行。检查日志,我注意到我收到“错误:未定义项目”..
    • 同样的事情,错误:项目未定义。我应该把整个代码上传到某个地方吗?我感到绝望了。
    • 我想知道它是否是您的 $http.get 中未定义的项目。 $http.get('sampleurl/pessoas/v1/?nome=' + item.name)
    【解决方案3】:

    很难重新创建问题以准确测试发生了什么,但根据您对原始问题的评论,返回的数据位于数组中。因此,为了获取 JSON,您必须执行以下操作:

    $scope.people = response.data[0]
    

    我总是发现控制台记录响应数据并在控制台中遍历对象及其子对象的层次结构很有帮助。这样您就可以找出属性的顺序(如果需要),这样可以更轻松地访问您需要的数据:console.log(response.data)

    【讨论】:

    • 这样我可以输入一些东西,但还是不行。
    • 什么是控制台日志记录?
    • 错误:项目未定义
    • 如果您登录 responseresponse.data 会怎样。你会得到什么?
    • 当我从 url 中删除 item.name 并强制为 name 设置一个值时,我可以获得整个对象列表。现在,我需要找到一种方法在我的输入中获取这些值并能够实际搜索某些内容。
    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2019-03-17
    • 2015-09-04
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2013-10-22
    • 2020-09-22
    相关资源
    最近更新 更多