2016-03-04 48 views
1

我想將工廠服務中的列表對象返回給控制器。列表對象包含數據,當我從服務中返回它時,但是當控件到達調用控制器時,列表變爲空(值丟失)。AngularJs中從工廠服務到控制器的返回值丟失

我所說的NG-變化= 「搜索()」 上的文字輸入

下面的代碼:

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

你能創建一個plunker或jsfiddle來演示這個 – gh9

+0

'$ scope.search'應該永遠不會包含數據嗎?這只是一個功能。它應該返回數據。您是否曾嘗試在工廠中使用制動點進行調試? –

+0

是的Bjorn,我將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(){0} {0}} scope.search = Service.search($ scope.Items,$ scope.Data,$ scope.sortingOrder,$ scope.query,$ scope.reverse); $ scope.search = };

相關問題