我有以下代码...
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
,该变量可以由多个 Controller 动态访问和更改。我认为应该通过将工厂作为依赖项注入(inject) Controller 函数以及变量来访问工厂内的变量。
这里有什么问题?
最佳答案
您的 linkService 工厂返回一个带有槽“currentLink”的对象,其值未定义。
您必须直接返回变量,或者您可以返回一个引用您的变量的对象,或者您可以返回一个包含变量的 getter 和 setter 的对象。
最后一个变体的优点是定义了一个很好的接口(interface)。 您的代码将更具可读性。
spa.factory("linkService", function() {
var currentLink = "/myLink.html";
/* accessor for currentLink */
var getLink = function(){
return currentLink;
};
return {get: getLink}; // service interface
});
---更新
更多细节:
- currentLink 是应该访问的变量,仅存在于 linkService 的上下文中
- 工厂返回对象“{get: getLink}”作为服务。因此,如果 Controller 注入(inject) linkService,它就会获取此对象。 使用 linkService.get();您可以访问变量 currentLink。
- getLink 只是一个本地函数。它充当访问器。
关于javascript - 在 Angular JS 工厂中返回变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31109706/