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陣列?我的意思是完整形式。 –

相關問題