离子服务不是一种功能

时间:2016-05-07 12:19:35

标签: angularjs ionic-framework

此当前代码因TypeError: compteService.InsertCompte is not a function

而返回此错误:InsertCompte

service.js

.factory('compteService', function($http, GetComptes) {


        var getComptes = function() {
            return $http.get(GetComptes.url);
        };

        return {
            getComptes: getComptes
        };
        var InsertCompte=function(user,compte){
            var strFinal = "[" + JSON.stringify(user) + "," +
                       JSON.stringify(account) + "]";
            return $http.post("http://localhost:26309/api/Compte/addUserV", strFinal)
            .then(function () {
                 $log.info("Insert Successful");
                return;
            });
        };
});

controller.js

.controller('AjouterCompteCtrl', function($scope,compteService) {
 $scope.InsertAccount = function (user,account) {
            compteService.InsertCompte(user,account)
            .success(function() {
            console.log('success');

            }).error(function() {               
                console.log('error');
            });

        };    
  });

2 个答案:

答案 0 :(得分:1)

这是因为您的代码中存在两个问题:

  1. 您没有将方法InsertCompte作为服务返回对象的一部分返回

    return {
        getComptes: getComptes,
        InsertCompte: InsertCompte
    };
    
  2. 您使用function expression而不是function declaration来定义方法InsertCompte。因此,即使您尝试将方法InsertCompte作为#1中提到的服务对象的一部分进行返回,您的代码也将无效。这是滥用揭示模块模式的典型示例。如果角度工厂总是使用显示模块模式以及函数声明

    .factory('compteService', function($http, GetComptes) {
      return {
        getComptes: getComptes,
        InsertCompte: InsertCompte
      };
    
    
      function getComptes () {
        return $http.get(GetComptes.url);
      };
    
      function InsertCompte (user,compte){
        var strFinal = "[" + JSON.stringify(user) + "," +
                   JSON.stringify(account) + "]";
        return $http.post("http://localhost:26309/api/Compte/addUserV", strFinal)
        .then(function () {
             $log.info("Insert Successful");
            return;
        });
      };
    });
    
  3. 通过步骤2中的工厂定义,您的代码将起作用

答案 1 :(得分:0)

您可以尝试按照以下方式重写工厂代码:

angular.module("compteService",[])
.factory('compteService', function($http) {
var api_url ="http://localhost:26309/api/Compte/";
    return{
        getComptes:function(){
            return $http.get(api_url);
        },
        InsertCompte:function(user,compte){
              var strFinal = "[" + JSON.stringify(user) + "," +
                   JSON.stringify(account) + "]";
        return $http.post(api_url+"addUserV", strFinal)
        .then(function () {
             $log.info("Insert Successful");
            return;
        });
        }
    };
});