Невозможно привязать последние данные из http-вызова к typeahead

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

$ scope.onChangeCallBack = function (viewValue) {

        var program = $scope.program.name;
        var occupancyType = $scope.occupancyType.name;
        var isStorage = $scope.isBuildingStorage;
        var isFranchise = $scope.isFranchise;
        var isLeased = $scope.isLeased;
        var isBarBuilding=$scope.isBarBuilding;
        console.log("program:"+program+"//occupancyType:"+occupancyType+"//isStorage:"+isStorage+"//isFranchise:"+isFranchise+"//+isBarBuilding"+isBarBuilding+"//viewValue"+viewValue);
        var param =
        {
          searchString: viewValue,
          filterCriteria: {
              isBar: true/*isBarBuilding*/,
              isFranchise: false/*isFranchise*/,
              isMercantile: true/*isLeased*/,
              program: program,
              occupancyType:"tennat"
             }
        }
        var promise =  AEBusinessOwnerService.getBuildingClassification(param);
        promise.then(function(data) {
          console.log(JSON.stringify(data.results));
          $sccope.classificationTypeAhead  = data.results;
           });

      };

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


person Ranjan Gururani    schedule 09.06.2016    source источник
comment
Вы уже исправили опечатку в своем коде? Внутри обещания есть $ sccope.classificationTypeAhead. $ scope написано с ошибкой.   -  person DanielC    schedule 10.06.2016
comment
Да, я исправил. - Ранджан.   -  person Ranjan Gururani    schedule 10.06.2016


Ответы (2)


Если бы мне пришлось угадывать, я бы предположил, что AEBusinessOwnerService.getBuildingClassification не возвращает обещание, интегрированное с циклом дайджеста Angular (то есть что-то, основанное на $ q). Попробуйте сделать это:

promise.then(function(data) {
    $scope.$apply(function() {
        console.log(JSON.stringify(data.results));
        $scope.classificationTypeAhead  = data.results;
    });
});
person Jonathan Rupp    schedule 09.06.2016
comment
Если я сделаю то же самое, я получу сообщение об ошибке: [$ rootScope: inprog] $ дайджест уже выполняется-Ranjan - person Ranjan Gururani; 10.06.2016
comment
Тогда AEBusinessOwnerService.getBuildingClassification сделает это за вас, и это не решение вашей проблемы. - person Jonathan Rupp; 10.06.2016

Это вспомогательный ответ Джонатану, но я пока не могу так комментировать:

promise.then(function(data) {
    $scope.$apply(function() {
        console.log(JSON.stringify(data.results));
        $scope.classificationTypeAhead  = data.results;
    });
});

Если я сделаю то же, что и выше, я получу сообщение об ошибке: [$ rootScope: inprog] $ digest уже выполняется.

Как указано в сообщении об ошибке, дайджест $ находится в процессе, вы можете решить его, выполнив следующие действия.

if(!$scope.$$phase) {
    $scope.$apply(function() {
        console.log(JSON.stringify(data.results));
        $scope.classificationTypeAhead  = data.results;
    });
}
person Ana Liza Pandac    schedule 10.06.2016