我有一个控制器,可以使用选项卡式面板加载视图。根据用户单击的项目,在调用函数select
时,数据将作为参数传递。
第一个标签工作正常,显示返回对象的数据。
第二个标签由图表组成。为了确保向图表提供了正确的数据集,我需要从第一个面板中返回的对象中获取id
。在我创建的服务loadPatentItemService
中,当我记录返回的项目时,它会显示正确的信息,但是当我从控制器lineCtrl
调用此服务时,它会记录undefined
。
在工厂loadPatentItemService
服务getPatent
console.log(item)
记录lineCtrl
undefined
当我调用它时,它会再次调用它并重置数据,因为没有参数传递给函数。
基本上,为什么我无法从服务lineCtrl
访问控制器loadPatentItemService
中的数据?
app.factory('loadPatentItemService', function() {
return {
select: function(item) {
var patentItem = [];
patentItem.push(item);
this.getPatent(patentItem);
return patentItem;
},
getPatent: function(item) {
// var hello = 'hello';
// console.log(item);
return item;
}
}
})
app.controller("lineCtrl", ['$scope', 'loadPatentItemService', function ($scope, loadPatentItemService) {
console.log(loadPatentItemService.getPatent());
}])
app.controller('patentListCtrl', ['$scope', 'loadPatentItemService', function($scope, loadPatentItemService) {
//FUNCTION INVOKED BY USER CLICKING ON ITEM IN TABLE
$scope.select = function(item) {
$scope.patentItem = loadPatentItemService.select(item);
}
}])
答案 0 :(得分:2)
在select
功能中,您需要将所选项目存储在服务中,以便您可以将其发送回getPatent
功能。
尝试将您的loadPatentItemService
更改为此
app.factory('loadPatentItemService', function() {
var service = {
selectedItem: null;
select: function(item) {
service.selectedItem = item;
return [selectedItem]; // Returning an array since your original post was returning an array
},
getPatent: function() {
return service.selectedItem ;
}
}
return service;
})