Javascript 在工厂中返回变量?
我有以下代码Javascript 在工厂中返回变量?,javascript,angularjs,variables,service,factory,Javascript,Angularjs,Variables,Service,Factory,我有以下代码 spa.factory("linkService", function() { var currentLink = null; return {currentLink:}; }); var cssController = spa.controller("cssController", function(linkService, currentLink) { this.fileName = linkService.currentLink; });
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
,可由多个控制器动态访问和更改。我认为应该通过将工厂作为依赖项注入控制器函数以及变量来访问工厂中的变量
这里有什么问题?工厂应该返回如下对象/方法:
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.
});
工厂应返回如下对象/方法:
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.
});
linkService工厂返回插槽为“currentLink”且其值未定义的对象 必须直接返回变量,也可以返回引用变量的对象,或者返回包含变量的getter和setter的对象 最后一个变体的优点是定义了一个很好的接口。 您的代码将具有更好的可读性
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}”作为服务。因此,如果一个控制器注入linkService,它就会得到这个对象。 使用linkService.get();您可以访问变量currentLink
- getLink只是一个本地函数。它充当访问器
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}”作为服务。因此,如果一个控制器注入linkService,它就会得到这个对象。 使用linkService.get();您可以访问变量currentLink
- getLink只是一个本地函数。它充当访问器