javascript - 在 Angular JS 工厂中返回变量?

标签 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,该变量可以由多个 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/

相关文章:

javascript - Controller 内的 Angular Filter Service

android - ListView中的隐藏字段传递一个变量

javascript - v-for 不呈现任何值

javascript - 鼠标悬停滑动菜单

javascript - Cake PHP 3.0 中的 Jquery ajax 调用

javascript - 使用嵌套 json 时,排序在 ngTable 中不起作用

javascript - Quickblox Javascript SDK + Angular + webRTC - Firefox 错误 : SecurityError: The operation is insecure

variables - 动态变量命名和引用 (ColdFusion)

javascript - 获取新对象的对象变量名

javascript - 在 javascript 的新方法中使用构造函数中的 privat var