Javascript 角度:无法使用服务访问控制器中的变量

Javascript 角度:无法使用服务访问控制器中的变量,javascript,angularjs,dependency-injection,angularjs-controller,Javascript,Angularjs,Dependency Injection,Angularjs Controller,我试图在控制器和函数之间共享一个变量。但是我从控制器那里得到一个错误,说: TypeError: Cannot read property 'getSet' of undefined 我已经学习了很多教程,但不知道哪里出了问题。 我的服务代码如下: app.service('shareData', function() { var selected = ["plz", "print", "something"]; var putSet = function(set) {

我试图在控制器和函数之间共享一个变量。但是我从控制器那里得到一个错误,说:

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

}]); 
我可以通过如下定义的功能访问所选的

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

}]); 
我的控制器是这样的:

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

}]); 

您的
topicController
控制器的工厂函数中有额外的
$mdToast
,您需要将其删除

它不起作用的原因是,目前在数组中提到了4个依赖项,如
['$scope'、'$http'、'$mdDialog'、'shareData',function
&然后您在DI数组旁边的函数中使用它的实例。在该函数中,您实际上有5个依赖项,其中
$mdToast
额外。因此,在幕后发生的情况是,
$scope
函数的
$scope$mdToast
(在控制器函数中)时,它持有的值是
'shareData'
(DI数组)&然后下一个参数
shareData
将一无所获

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

函数($scope,$http,$mdDialog,shareData){//非常感谢!您节省了我宝贵的时间!但我不知道我无法访问它的确切原因,删除$mdToast就可以了magic@jAYANTYADAV我更新了我的答案,详细解释了……我想这会对你有所帮助。谢谢:)再次感谢!顺便说一句,什么是DI数组?我的意思是完整的形式。现在它似乎是合乎逻辑的!而不是神奇的。谢谢你澄清我的概念:)