在 Angular JS 工厂中返回变量?

Returning variables in Angular JS factories?

我有以下代码...

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 可以被多个控制器动态访问和更改。我认为应该通过将工厂作为依赖项注入控制器函数以及变量来访问工厂内的变量。

这里有什么问题?

工厂应该returnobjects/methods这样:

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 工厂 return 是一个具有插槽 'currentLink' 且其值未定义的对象。

您必须直接 return 变量,或者您可以 return 一个引用您的变量的对象,或者您可以 return 一个包含 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 的上下文中
  • 工厂return将对象“{get: getLink}”作为服务。因此,如果控制器注入 linkService,它就会得到这个对象。 使用 linkService.get();您可以访问变量 currentLink.
  • getLink 只是一个局部函数。它用作访问器。