2016-03-04 1 views
1

Я хочу вернуть объект списка с заводского обслуживания на контроллер. Объект списка содержит данные, когда я возвращаю его из службы, но когда элемент управления достигает вызывающего контроллера, список становится пустым (значения теряются).Возвращаемое значение с заводского обслуживания контроллеру в AngularJs потеряно

я называю нг-изменение = "поиск()" на ввод текста

Вот код:

factoryservice.js

app.factory('newService', ['$http', '$q','$filter', function ($http, $q, $filter) 
{ 
    var ServiceFactory = {}; 

    var searchMatch = function (haystack, needle) { 
     if (!needle) { 
      return true; 
     } 
     return haystack.toString().toLowerCase().indexOf(needle.toLowerCase()) !== -1; 
    }; 

    var _search = function (Items, data, sortingOrder, query, reverse) { 
     Items = $filter('filter')(data, function (item) { 
      for (var attr in item) { 
       if (angular.isUndefined(item[attr]) || item[attr] === null) 
        continue; 
       if (searchMatch(item[attr], query)) 
        return true; 
      } 
      return false; 
     }); 
     // take care of the sorting order 
     if (sortingOrder !== '') { 
      Items = $filter('orderBy')(Items, sortingOrder, reverse); 
     } 

     return Items; 
    }; 

    ServiceFactory.search = _search; 

    return ServiceFactory; 
}]); 

Здесь "вернуть товары" в метод поиска имеет правильные значения.

controller.js

app.controller('mycontroller', ['$scope', '$http', '$filter', 'Service', function ($scope, $http, $filter, Service) { 

    var sortingOrder = 'Site'; 
    $scope.sortingOrder = sortingOrder; 
    $scope.reverse = false; 
    $scope.Items = []; 

    $scope.Data = function() { 
     $scope.loading = true; 
     $http({ 
      url: "http://localhost:50100/api/mycontroller", 
      dataType: 'json', 
      method: 'GET', 
      data: '', // data:'', for input parameters, create a small entity class and assign it 
      headers: { 
       "Content-Type": "application/json" 
       // "Content-Type": 'application/x-www-form-urlencoded' 
      } 
     }).success(function (response) { 
      $scope.Data = response; 
      $scope.Items = $scope.Data; 
     }) 
     .error(function (error) { 
      alert(error); 
     }) 
     .finally(function() { 
      $scope.loading = false; 
     }); 
    } 

    $scope.search = function() { 
     return Service.search($scope.Items, $scope.Data, $scope.sortingOrder, $scope.query, $scope.reverse); 
    }; 

}]); 

Здесь $ scope.search не содержит значений (данные теряются здесь).

Я новичок в angularJS, надеюсь, кто-то может мне помочь в этом. Заранее спасибо.

+0

Вы можете создать плункер или jsfiddle для демонстрации этого – gh9

+0

'$ scope.search' никогда не должны содержать данные? Это только функция. Он должен возвращать данные. Вы пробовали отладить его с тормозной точки на заводе? –

+0

Да, Бьорн, я присвоил Service.search $ scope.search и, похоже, сейчас работает. – Desparado

ответ

0

Вы должны вводить свое имя службы (newService не Service) в контроллер, как:

app.controller('mycontroller', ['$scope', '$http', '$filter', 'newService', function ($scope, $http, $filter, newService) { 

Так что ваша $scope.search функция должна быть модифицирована:

$scope.search = function() { 
     return newService.search($scope.Items, $scope.Data, $scope.sortingOrder, $scope.query, $scope.reverse); 
}; 

Если выше Безразлично» t, я могу более подробно рассмотреть настройку вашего сервиса.

0

Ваша функция $scope.Data заменяет себя в функции обработчика успеха.

$scope.Data = function() { 
     $scope.loading = true; 
     $http({ 
      url: "http://localhost:50100/api/mycontroller", 
      dataType: 'json', 
      method: 'GET', 
      data: '', // data:'', for input parameters, create a small entity class and assign it 
      headers: { 
       "Content-Type": "application/json" 
       // "Content-Type": 'application/x-www-form-urlencoded' 
      } 
     }).success(function (response) { 
      //THIS IS A PROBLEM 
      $scope.Data = response; 
      $scope.Items = $scope.Data; 
     }) 
     .error(function (error) { 
      alert(error); 
     }) 
     .finally(function() { 
      $scope.loading = false; 
     }); 
    } 
0

Благодарим за ответы друзей ... !!!

Я только что изменил следующую строку кода и, похоже, работает.

$ scope.search = function() { $ scope.search = Service.search ($ scope.Items, $ scope.Data, $ scope.sortingOrder, $ scope.query, $ scope.reverse); };

Смежные вопросы