簡體   English   中英

從工廠服務到AngularJs中的控制器的返回值丟失

[英]Return value from factory service to controller in AngularJs is lost

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

我在文本輸入中稱ng-change =“ search()”

這是代碼:

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的新手,希望有人可以幫助我。 提前致謝。

您需要將服務名稱( newService not 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);
};

如果上述方法不起作用,我可以仔細查看您的服務設置。

您的$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;
         });
    }

謝謝朋友們的回復... !!!

我只是更改了下面的代碼行,它似乎正在工作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM