angular 服务在调用控制器之前终止
angular service dies before controller is invoked
我正在开发一个使用 public API 的 angular 应用程序。我似乎无法将服务对象传递到控制器中。错误是
TypeError: Cannot read property 'searchRole' of undefined
这一行:
var model = govtracksvc.searchRole();
当我单步执行调试器时,它首先访问服务文件。 govtrack & govtracksvc 都被创建,并且 govtrack 被注入。然后服务对象死在文件的末尾,因为当它调用控制器文件时,服务变量是未定义的。当应用程序进入控制器文件时,我缺少使服务对象保持活动状态的 link。任何帮助都是巨大的。
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 是问题的一部分。
我将 API 对象作为 .value() 传入。更简单的解决方案!
我正在开发一个使用 public API 的 angular 应用程序。我似乎无法将服务对象传递到控制器中。错误是
TypeError: Cannot read property 'searchRole' of undefined
这一行:
var model = govtracksvc.searchRole();
当我单步执行调试器时,它首先访问服务文件。 govtrack & govtracksvc 都被创建,并且 govtrack 被注入。然后服务对象死在文件的末尾,因为当它调用控制器文件时,服务变量是未定义的。当应用程序进入控制器文件时,我缺少使服务对象保持活动状态的 link。任何帮助都是巨大的。
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 是问题的一部分。
我将 API 对象作为 .value() 传入。更简单的解决方案!