我在服务/工厂中调用函数时遇到TypeError。 非常奇怪,设置控制器和服务的方法在另一个应用程序中正常工作。但是我现在正试图用Ionic / AngularJS构建的应用程序中没有。
任何人都可以在代码中看到我做错了吗?
这是我的controller.js
(function () {
angular.module('driv.MapCtrl', [])
.controller('MapCtrl', ['$scope','mapService', MapCtrl]);
function MapCtrl($scope, mapService) {
mapService.sayHello().success(function () {
});
}
})();
我的Service.js看起来像:
(function () {
"use strict";
angular.module('driv.mapService', [])
.service('mapService', function () {
//alert('Kommer til Service');
this.sayHello = ['John', 'James', 'Jake'];
})
})();
如果我注释掉警告消息然后它会激活,所以看起来this.sayHello从不调用或触发,我收到一条错误消息,说mapService.sayHello不是函数。为什么呢?
答案 0 :(得分:1)
您将this.sayHello
定义为数组,并尝试将其作为函数执行。
this.sayHello = ['John', 'James', 'Jake'];
mapService.sayHello()
您必须将this.sayHello
重新格式化为某个功能,或在控制器中对其进行不同的处理。
答案 1 :(得分:0)
这里有几个问题:
您将服务中的sayHello
定义为数组
您将其称为功能
您正在使用它的结果作为承诺(即在其上调用.success
)
因此,您需要修复使用者,即控制器代码,或修复服务,例如
(function () {
"use strict";
angular.module('driv.mapService', [])
.service('mapService', function ($q) {
this.sayHello = function() {
return $q(function(resolve, reject) {
return resolve( ['John', 'James', 'Jake'] )
})
}
})
答案 2 :(得分:0)
试试这个,你的注射器里面装着你的控制器:
(function () {
angular.module('driv.MapCtrl')
.controller('MapCtrl', MapCtrl);
MapCtrl.$inject = ['$scope','mapService'];
function MapCtrl($scope, mapService) {
console.log(mapService.sayHello());
}
您已将服务功能定义为数组:
(function () {
"use strict";
angular.module('driv.mapService')
.service('mapService', function () {
var arrNames = ['John', 'James', 'Jake'];
//alert('Kommer til Service');
this.sayHello = function() { return arrNames; }
})
使用时,还可以在每次调用时声明模块:
angular.module('app', [])
除非您是第一次声明模块,否则不要使用'[]'
答案 3 :(得分:0)
嗨非常感谢重播......:)
如果我将其更改为:angular.module('app'),正如您所说,我的应用程序停止工作并给出一个包含错误消息的空白页: 未捕获的错误:[$ injector:nomod]和Uncaught Error:[$ injector:modulerr]
2。 我将service.js中的代码更改为:
(function () {
"use strict";
angular.module('driv.mapService')
.service('mapService', function () {
var arrNames = ['John', 'James', 'Jake'];
this.sayHello = function () {
return arrNames;
};
})
})();
在我的MapCTRL中,我将其更改为:
(function () {
angular.module('driv.MapCtrl')
.controller('MapCtrl', MapCtrl);
MapCtrl.$inject = ['$scope', 'mapService'];
function MapCtrl($scope, mapService) {
mapService.sayHello().then(function (result) {
alert(result);
}, function (error) {
alert('Error');
});
}
})();
我仍然得到TypeError:mapService.sayHello(...)。那么它不是一个函数,她现在的代码是什么错?
答案 4 :(得分:0)
如果我这样打电话给我的服务:
mapService.sayHello();
然后它可以工作,但当我打电话给我的服务时:
mapService.sayHello().then(function (results) {
alert(results);
}, function (error) {
alert('Error');
});
上面的代码Dosent工作....为什么?