AngularJS,TypeError:mapService.sayHello不是函数

时间:2016-02-23 15:05:41

标签: angularjs ionic-framework

我在服务/工厂中调用函数时遇到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不是函数。为什么呢?

5 个答案:

答案 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)

嗨非常感谢重播......:)

  1. 我宣布我的模块如下: angular.module('app',[])
  2. 如果我将其更改为: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工作....为什么?