从控制器的第二个函数访问返回值

时间:2017-06-12 14:49:01

标签: javascript angularjs

我有一个控制器,可以使用选项卡式面板加载视图。根据用户单击的项目,在调用函数select时,数据将作为参数传递。

第一个标签工作正常,显示返回对象的数据。

第二个标签由图表组成。为了确保向图表提供了正确的数据集,我需要从第一个面板中返回的对象中获取id。在我创建的服务loadPatentItemService中,当我记录返回的项目时,它会显示正确的信息,但是当我从控制器lineCtrl调用此服务时,它会记录undefined

在工厂loadPatentItemService服务getPatent

内登录

console.log(item)

enter image description here

记录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);
    }
}])

1 个答案:

答案 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;
})