此当前代码因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');
});
};
});
答案 0 :(得分:1)
这是因为您的代码中存在两个问题:
您没有将方法InsertCompte
作为服务返回对象的一部分返回
return {
getComptes: getComptes,
InsertCompte: InsertCompte
};
您使用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;
});
};
});
通过步骤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;
});
}
};
});