Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在工厂中返回变量?_Javascript_Angularjs_Variables_Service_Factory - Fatal编程技术网

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只是一个本地函数。它充当访问器

您的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只是一个本地函数。它充当访问器

我很难理解这一点。如果我理解正确,我们将一个对象设置为仅将另一个对象设置为第一个对象的值,然后返回一个数组,其中该值被索引为“get”。为什么我们不能直接声明第一个对象并处理它呢?我补充了一些解释。这有用吗?我很抱歉这么固执,但我还是不明白;即使有你的新评论也不行。因此,currentLink被声明为变量,但仅在linkService范围内可用。知道了这一点,工厂的目的需要是在注入时返回其作用域内变量的值,以便我们可以访问本地作用域之外的数据。我不明白为什么不能通过简单地返回变量来实现这一点。为什么我们需要子功能?此外,即使我们解决了这个问题,也无法保存新数据。如果不更改变量的状态,也可以直接返回它。但是:通常您是在操纵变量的值。如果直接返回,则返回的是值,而不是对象的引用。我很难理解这一点。如果我理解正确,我们将一个对象设置为仅将另一个对象设置为第一个对象的值,然后返回一个数组,其中该值被索引为“get”。为什么我们不能直接声明第一个对象并处理它呢?我补充了一些解释。这有用吗?我很抱歉这么固执,但我还是不明白;即使有你的新评论也不行。因此,currentLink被声明为变量,但仅在linkService范围内可用。知道了这一点,工厂的目的需要是在注入时返回其作用域内变量的值,以便我们可以访问本地作用域之外的数据。我不明白为什么不能通过简单地返回变量来实现这一点。为什么我们需要子功能?此外,即使我们解决了这个问题,也无法保存新数据。如果不更改变量的状态,也可以直接返回它。但是:通常您是在操纵变量的值。如果直接返回,则返回值,而不是对象的引用。