Невозможно использовать загрузочный шрифт Angular-UI: JSON с несколькими атрибутами

У меня есть ответ JSON следующим образом:

{
    "Unidades": [
    {
        "Nome": "laskjdhflksjfg",
        "Codigo": "11106600"
    },
    {
        "Nome": "wertwertwertwer",
        "Codigo": "11106601"
    },
    {
        "Nome": "wertwertwertwer",
        "Codigo": "11106602"
    }
    ]
}

и я пытаюсь использовать загрузочный шрифт Angular-UI, делая это:

КОНТРОЛЛЕР

function TypeaheadCtrl($scope, $http) {
    $scope.selected = undefined;    
    $scope.url = 'unidades/unidades-controler.asp'; //the response of json is from here
    $http.get($scope.url).success(function (data, status) { 
            $scope.Unidades = data[0].Unidades;
        }).error(function (data, status) {
            $scope.response = 'Request failed';
        });
}

HTML

<div  ng-controller="TypeaheadCtrl">        
    <pre>Model: {{selected | json}}</pre>
    <input type="text" ng-model="selected" typeahead="Unidade.Codigo as Unidade.Nome for Unidade in Unidades | filter:$viewValue | limitTo:8" class="form-control">        
</div>

Моя проблема: мне нужно, чтобы <pre>Model: {{selected | json}}</pre> отображало значение Unidade.Codigo, и мне нужно, чтобы <input type="text" ng-model="selected" typeahead="Unidade.Codigo as Unidade.Nome for Unidade in Unidades | filter:$viewValue | limitTo:8" class="form-control"> отображало значение Unidade.Nome. Как я могу это сделать?

Вот что я получил:

введите здесь описание изображения

И это то, что мне нужно:

введите здесь описание изображения

Я внес эти изменения, следуя этому примеру: p=preview, но все еще не работает:

HTML

<div class='container-fluid' ng-controller="TypeaheadCtrl">
    <pre>Model: {{Selected| json}}</pre>
    <input type="text" ng-model="Selected" typeahead="Unidade.Codigo as Unidade.Nome for Unidade in getUnidades($viewValue) | filter:$viewValue | limitTo:8" class="form-control" />
</div>

КОНТРОЛЛЕР

function TypeaheadCtrl($scope, $http) {
    $scope.selected = undefined;    
    $scope.url = 'unidades/unidades-controler.asp'; //the response of json is from here
    $http.get($scope.url).success(function (data, status) { 
        $scope.Unidades = data[0].Unidades;
    }).error(function (data, status) {
        $scope.response = 'Request failed';
    });
    $scope.getUnidades = function($viewValue) {
        return $http.get($scope.Unidades).then(function(response){
          return data;
        });
      };
}

ОШИБКА

GET http://localhost/[object%20Object],[object%20Object],[…t],[object%20Object],[object%20Object],[object%20Object],[object%20Object] 400 (Bad Request) 

Я также пытался сделать это:

function TypeaheadCtrl($scope, $http) {
    $scope.selected = undefined;    
    $scope.url = 'unidades/unidades-controler.asp'; //the response of json is from here
    $scope.getUnidades = function($viewValue) {
        return $http.get($scope.url).success(function (data, status) { 
            return data;
        }).error(function (data, status) {
            $scope.response = 'Request failed';
        }); 
    };
}

Но я получаю эту ошибку:

ReferenceError: response is not defined

person Uder Moreira    schedule 20.01.2014    source источник
comment
Что именно вы хотите и что вы получаете? кажется я не понимаю проблемы   -  person dcodesmith    schedule 20.01.2014
comment
Я отредактировал и поместил изображение того, что у меня получилось.   -  person Uder Moreira    schedule 21.01.2014
comment
response равно undefined в обратном вызове успеха есть только data и status, но нет ответа   -  person dcodesmith    schedule 21.01.2014
comment
@dcodesmith Я внес это изменение (отредактировано прямо сейчас), но все еще не работает...   -  person Uder Moreira    schedule 21.01.2014
comment
То, что у вас есть в вашем plunkr, кажется, работает для меня   -  person dcodesmith    schedule 21.01.2014
comment
@dcodesmith, это работает, но не делает то, что мне нужно. Делается как на картинках.   -  person Uder Moreira    schedule 21.01.2014
comment
Где тогда код для изображений?   -  person dcodesmith    schedule 21.01.2014
comment
@dcodesmith Они перед изображением.   -  person Uder Moreira    schedule 21.01.2014


Ответы (3)


Пожалуйста, посмотрите функциональность, которую вы запрашиваете здесь:

http://plnkr.co/edit/1Sm17103S73nJbpb2PmK?p=preview

У меня работает с тем же кодом, что и у вас, что именно вам нужно?

person DJ.    schedule 20.01.2014
comment
Мне нужно то, что вы мне показываете, но я попробовал здесь тот же код, и он не работает. - person Uder Moreira; 21.01.2014

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

Это пример функции, которую вы можете использовать в своем контроллере:

$scope.getUnidades = function($viewValue) {
    return $http.get('Unidades.json').then(function(response){
      return response.data;
    });
  };

а затем в вашей разметке:

 <input typeahead="Unidade.Codigo as Unidade.Nome for Unidade in getUnidades($viewValue)" ng-model="selected" >

Вот пример загрузки: http://plnkr.co/edit/ibIMDNmK26E4mTdDK5dD?p=preview

person pkozlowski.opensource    schedule 20.01.2014
comment
Это не работает... У меня нет JSON, если я не сделаю запрос с помощью $http. - person Uder Moreira; 21.01.2014
comment
Я не могу напрямую использовать Unidades.JSON - person Uder Moreira; 21.01.2014
comment
@UderMoreira, это всего лишь пример ... вы можете вернуть этот JSON из любой службы, которую вы можете вызвать через $ http ... Не уверен, что вы подразумеваете под I can't use 'Unidades.JSON' directly ... - person pkozlowski.opensource; 21.01.2014
comment
@UderMoreira, вы пытаетесь объединить мой ответ со своими первоначальными попытками. Это нехорошо, вам нужно использовать синтаксис из ответа. Не добавляйте ` | фильтр:$viewValue | limitTo:8` после вызова getUnidades($viewValue) в вашем шаблоне! Также не добавляйте 2 вызова $http. - person pkozlowski.opensource; 21.01.2014
comment
В моем оригинале это работает, но когда я выбираю значение из списка, входное значение меняется на значение de CODIGO... Я хочу, чтобы NOME оставался... Все перепробовал. Я не знаю, что еще делать.. все еще тринги здесь... - person Uder Moreira; 21.01.2014

Хорошо, это то, что я сделал, и это сработало.

    <div  ng-controller="TypeaheadCtrl">        
        <pre>Model: {{selected.Codigo | json}}</pre>
        <input type="text" ng-model="selected" typeahead="Unidade as Unidade.Nome for Unidade in Unidades | filter:$viewValue | limitTo:8" class="form-control">        
    </div>

Я только что изменил typehead на Unidade as Unidade.Nome for Unidade in Unidades и внутри модели использую только то, что мне нужно: selected.Codigo

Спасибо вам всем!

person Uder Moreira    schedule 21.01.2014
comment
Это хороший подход, но я не понимаю, почему это работает, а по-другому — нет. Я расследую некоторые, когда на моем компьютере. - person DJ.; 22.01.2014