2016-02-23 51 views
0

當我在服務/工廠中調用函數時,出現TypeError錯誤。 很奇怪,設置控制器和服務的方法在另一個應用程序中工作正常。但是我現在試圖用Ionic/AngularJS來構建應用程序。AngularJS,TypeError:mapService.sayHello不是函數

任何人都可以看到我在代碼中做錯了什麼?

這裏是我的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']; 

    }) 
})(); 

如果我註釋掉的警告信息,然後它激發起來,所以它看起來是這樣的。 sayHello永遠不會調用或啓動,並且我收到一條錯誤消息,說mapService.sayHello不是函數。爲什麼?

回答

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']) 
     }) 
    }   

})

1

您將this.sayHello定義爲數組,然後嘗試將其作爲函數執行。

this.sayHello = ['John', 'James', 'Jake']; 
mapService.sayHello() 

你要麼必須重新格式化您的this.sayHello函數或在您的控制器不同的對待它。

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', []) 

不要使用「[]」除非你是

+0

Oki,非常感謝您的重播。 – user3629354

0

嗨非常感謝聲明模塊首次重播.. :)

  1. 我宣佈我的模塊,如: angular.module( '應用',[])

如果我將其更改爲:角。如您所說,然後我的應用程序停止工作,並給出一個空白頁面,並顯示錯誤消息: 未捕獲的錯誤:[$ 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'); 
    });   
} 

})();

仍然iam得到TypeError:mapService.sayHello(...)。然後是不是一個函數,她現在的代碼是什麼錯?

0

如果我打電話給我的服務是這樣的:

mapService.sayHello(); 

然後它工作,但是當我打電話給我的服務,如:

mapService.sayHello().then(function (results) { 
     alert(results); 
    }, function (error) { 
     alert('Error'); 
    }); 

上面的代碼dosent工作....爲什麼?