【问题标题】:angular service dies before controller is invoked在调用控制器之前,角度服务死亡
【发布时间】:2015-10-02 19:29:24
【问题描述】:

我正在开发一个使用公共 API 的 Angular 应用程序。我似乎无法将服务对象传递给控制器​​。错误是

TypeError: Cannot read property 'searchRole' of undefined

在这一行:

var model = govtracksvc.searchRole();

当我在调试器中单步执行时,它首先访问服务文件。 govtrack 和 govtracksvc 都被创建,并且 govtrack 被注入。然后服务对象在文件末尾死掉,因为当它调用控制器文件时,服务变量是未定义的。当应用程序进入控制器文件时,我缺少使服务对象保持活动状态的链接。任何帮助都将是巨大的。

rep.module.js

(function () {
    var angular = require('angular');  //browserify bundling with NPM
    angular.module('RepresentativeApp', []);
    require('./rep.service.js');
    require('./Rep.js');

})();

rep.service.js

var govtracksvc = (function () {
    angular
        .module('RepresentativeApp')
        .factory('govtracksvc', govtracksvc);

    var govtrack = require('govtrack-node');

    govtracksvc.$inject = ['govtrack'];

    function govtracksvc(govtrack) {
        var service = { searchRole: searchRole };
        return service;
        function searchRole(obj) { //do stuff }
    }
})();

Rep.js

var Rep = (function () {
    angular
        .module('RepresentativeApp')
        .controller('Rep', [Rep]);

    Rep.$inject = ['govtracksvc'];

    function Rep(govtracksvc) {
        var model = govtracksvc.searchRole();
        return model;
    }
})();

更新

我还没有深入了解这一点,但我相信这与 browserify 如何捆绑模块有关。我认为 IIFE 是问题的一部分。

【问题讨论】:

  • 你为什么使用 $inject?
  • 'govtrack' 服务未在您的示例中定义。你不需要做任何事情来保持依赖“活着”。如果注入了,就注入了,如果没有注入,就没有。
  • @YuriZarubin $inject 添加依赖项-对于控制器,依赖项是工厂。对于工厂来说,依赖是 govtrack 对象。
  • @estus govtracksvc 在 rep.service.js 中定义。问题是控制器脚本运行时变量未定义。它注入了一个未定义的“govtracksvc”
  • 是的,但你为什么要使用 $inject 呢?定义依赖关系的惯用角度方式就是.controller(function(yourDependency) { yourDependency.foo() })。为什么将数组表示法与 $inject 一起使用?这很奇怪。

标签: javascript angularjs node.js dependency-injection browserify


【解决方案1】:

我将 API 对象作为 .value() 传递。更简单的解决方案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多