我正在尝试在控制器和函数之间共享变量。但我收到控制器的错误,说:
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
}]);
答案 0 :(得分:4)
您的$mdToast
控制器的工厂功能中有额外topicController
,您需要将其删除。
背后的原因是工作不正常,目前你在['$scope', '$http', '$mdDialog', 'shareData', function
&数组等数组中提到了4个依赖项。然后你在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,所以依赖项在数组中注入的顺序,您应该以相同的顺序 然后注入基础工厂功能。