在 AngularJs 中,从工厂服务到控制器的返回值丢失
Return value from factory service to controller in AngularJs is lost
我想将列表对象从工厂服务返回到控制器。当我从服务返回列表对象时,它包含数据,但是当控件到达调用控制器时,列表变为空(值丢失)。
我在文本输入上调用 ng-change="search()"
代码如下:
工厂服务.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;
}]);
在这里,搜索方法中的"返回项目"具有正确的值。
控制器.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
不是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 = 函数 () { $scope.search = Service.search($scope.项目,$scope。data, $scope.sortingOrder, $scope.query, $scope.reverse); };
相关文章:
- 将从控制器返回的selectbox值动态呈现为json
- 从服务返回值时$scope控制器的变量是未定义的
- 将javascript返回值传递给MVC 4中的控制器
- 无法使用.ajax调用显示MVC控制器返回的属性值
- 尝试从工厂中的 ref.on() 返回值到控制器
- 在 AngularJs 中,从工厂服务到控制器的返回值丢失
- $http没有从Spring MVC REST控制器返回值
- 如何使用ajax从JSP中的控制器检索返回值
- 如何读取一个JavaScript对象的值作为一个排序列表从控制器返回
- AngularJS从工厂返回值到控制器
- AngularJS从外部控制器的AJAX获取返回值
- AngularJS:控制器返回未定义的值
- 基于JSF中动作控制器方法的返回值调用javascript
- 用控制器返回的值填充图表
- 在控制器方法返回值之前,首先执行提交按钮的单击事件
- AngularJS控制器返回值
- Angular:在我在控制器中设置返回值之前,我怎么能等待服务中的承诺被解析呢?
- asp.net mvc 3 -通过Javascript将值传递给控制器返回视图
- 在我自己的Angular服务中,如何将返回值返回给调用该服务的控制器
- 基于控制器返回值调用javascript方法