1

我有一個功能的角度控制,像這樣:角服務返回undefined不是一個函數

app.controller("UsersController", ["$scope", "UserList", function($scope, UserList) { 

    $scope.createUserSubmit = function(newUser) { 

     UserList.createUser().success(function(data){ 
     console.log(data); 
     }); 

    } 

}]); 

createUserSubmit()函數被調用,它在服務UserList調用另一個函數的函數createUser()

服務看起來是這樣的:

app.service("UserList", function() { 
    this.createUser = function(){ 
    console.log("doing it"); 
    return "hi"; 
    } 
}); 

現在,當這一切都運行時,我得到記錄的「做」的消息,但後來我得到以下錯誤和console.log(data)不記錄。

TypeError: undefined is not a function 

通常這種類型的錯誤是自我解釋,所以要麼我是一個白癡或有一些混淆的事情發生。據我所知,這是一個功能。

+3

'.success'不會自動從任何返回值變爲可用,你需要返回角httpPromise爲 – PSL

+0

@PSL感謝。上面的這個代碼是縮寫的,但實際上在'createUser()'函數中有一個到數據庫的http調用。然後我返回來自該呼叫的數據。如果我不能執行'.success',我怎樣才能對返回的數據進行回調? – Coop

回答

7

您不會從字符串返回值(您從方法createUser返回的那個)獲得success方法。您將它作爲角度的一部分$httphttpPromise。如果您實際上正在使用http進行ajax呼叫,只需返回$http呼叫。

app.service("UserList", function($http) { 
    this.createUser = function(){ 
    return $http('...'); 
    } 
}); 

successerror方法添加到httpPromise inaddition至$ Q諾言功能的特殊功能,它是一個擴展$q承諾。

如果您正在尋找返回數據返回$q的承諾,其中then方法相當於success方法。 $ q承諾沒有successerror方法。

app.service("UserList", function($http) { 
    this.createUser = function(){ 
    return $http('...').then(function(response){ 
      //Do your transformation and return the data 
      return response.data; 
      }); 
    } 
}); 

UserList.createUser().then(function(data){ 
    console.log(data); 
}); 
+0

這是有道理的。謝謝,這真的有幫助。 – Coop

+0

@Coop歡迎您! – PSL