我有以下代码......
spa.factory("linkService", function() {
var currentLink = null;
return {currentLink:};
});
var cssController = spa.controller("cssController", function(linkService, currentLink) {
this.fileName = linkService.currentLink;
});
var navigationController = spa.controller("navigationController", function(linkService, currentLink) {
this.setLink = function(setValue) {
linkService.currentLink = setValue;
};
this.checkCurrent = function(checkValue) {
return linkService.currentLink == checkValue;
}
});
我从另一个问题中写的片段中创建了这段代码,并修复了我第一次尝试时被告知错误的内容。这个问题可以在这里找到。这是一个更具体的案例,因此不重复。
检查控制台后,我相信这个脚本的问题在于工厂。
linkService
工厂的尝试功能是提供一个变量currentLink
,可由多个控制器动态访问和更改。我相信工厂内部的变量应该通过将工厂作为依赖项注入控制器函数以及变量来访问。
这里有什么问题?
答案 0 :(得分:4)
您的linkService工厂返回一个带有插槽' currentLink'的对象。它的价值未定义。
您必须直接返回变量,或者您可以返回引用变量的对象,或者您可以将包含getter和setter的对象返回给变量。
最后一个变体的优点是可以定义一个漂亮的界面。 您的代码将更易读。
gravity
---更新
更多细节:
答案 1 :(得分:0)
工厂应该返回对象/方法:
spa.factory("linkService", function() {
var linkServiceFactory = {};
var _currentLink = null;
linkServiceFactory.currentLink = _currentLink;
return linkServiceFactory;
});
在控制器中注入工厂名称以获取其子部件。:
var cssController = spa.controller("cssController", function(linkService) {
this.fileName = linkService.currentLink;
});
同样,
var navigationController = spa.controller("navigationController", function(linkService) {
// other code.
});