在Angular JS工厂中返回变量?

时间:2015-06-29 07:08:12

标签: 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;
});

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

这里有什么问题?

2 个答案:

答案 0 :(得分:4)

您的linkService工厂返回一个带有插槽' currentLink'的对象。它的价值未定义。

您必须直接返回变量,或者您可以返回引用变量的对象,或者您可以将包含getter和setter的对象返回给变量。

最后一个变体的优点是可以定义一个漂亮的界面。 您的代码将更易读。

gravity

---更新

更多细节:

  • currentLink是应该访问的变量,它仅存在于linkService的上下文中
  • 工厂返回对象" {get:getLink}"作为服务。因此,如果控制器注入linkService,它将获取此对象。 使用linkService.get();您可以访问变量currentLink。
  • getLink只是一个本地函数。它是一个访问者。

答案 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.
});