1

我想共享控制器和函数之间的变量。但我得到一个错误从控制器,这样说:Angular:无法使用服务访问控制器中的变量

TypeError: Cannot read property 'getSet' of undefined 

我已经经历了许多教程了,但不知道我该怎么错在何处。 我的服务代码是这样的:

app.service('shareData', function() { 

    var selected = ["plz", "print", "something"]; 

    var putSet = function(set) { 
     selected = set; 
    }; 

    var getSet = function() { 
     return selected; 
    }; 

    return { 
     putSet: putSet, 
     getSet: getSet 
    }; 
}); 

我能够从我这样定义功能达到selected

setDisplay = function($scope, $mdDialog, shareData) { 

    console.log(shareData.getSet()); // this is working 

    $scope.selected = shareData.getSet(); 
    $scope.hide = function() { 
     $mdDialog.hide(); 
    }; 
    $scope.cancel = function() { 
     $mdDialog.cancel(); 
    }; 
    $scope.answer = function(answer) { 
     $mdDialog.hide(answer); 
    }; 
}; 

我的控制器是这样的:

app.controller('topicController', ['$scope', '$http', '$mdDialog', 'shareData', 
function ($scope, $http, $mdDialog, $mdToast, shareData) { 

    console.log(shareData.getSet()); // NOT WORKING 

}]); 

回答

3

你有在您的topicController控制器的工厂功能中额外$mdToast,您需要将其删除。

它背后的原因是没有工作是,目前你有4个依赖关系在数组中提到像['$scope', '$http', '$mdDialog', 'shareData', function &然后你正在使用它的实例内的DI数组旁边的函数。在那个函数里面,你实际上有5个依赖关系,其中$mdToast多余。因此,在幕后,发生的功能$scope的值保持为'$scope' DI数组,您也可以从右向左移动。但是,当涉及到$mdToast(在控制器功能中)时,其值为'shareData'(DI阵列)&,则下一个参数shareData不会得到任何结果。

app.controller('topicController', ['$scope', '$http', '$mdDialog', 'shareData', 
     function ($scope, $http, $mdDialog, shareData) { //<--removed $mdToast 
    console.log(shareData.getSet()); 
    } 
]); 

注:您使用DI inline array annotation,所以在这种依赖性在阵列注入的顺序,以相同的顺序,你应该 在底层的工厂函数注入即可。

+0

非常感谢!你节省了我宝贵的时间!但我没有得到确切的原因,为什么我无法访问它,并删除$ mdToast做了神奇 –

+0

@jAYANTYADAV我更新了我的答案,详细解释..我认为它会帮助你。谢谢:) –

+0

再次感谢!顺便说一句,什么是DI阵列?我的意思是完整形式。 –

相关问题