我有一個小問題,使用AngularJS(v1.3.15)和Angular-Route開發一個簡單的GUI遊戲創意。 無論如何,對於註冊,我想在輸入時預先檢查用戶名的可用性。我設置了一個$ watch,調用工廠服務來獲得一個$ http.post答案,但在我的控制器中,出現錯誤「fwMainService.checkUsernameAvailability(...)。那麼它不是函數」。 我三重檢查每一個拼寫,語法和邏輯(順便說一句,我是新來的Angular)。 其他每個工廠功能都按其應有的工作。angularjs .then()不起作用(然後不是函數)
是否因爲checkUsernameAvailability()應該返回一個promise,而不是一個字符串?
任何想法?提前致謝!
我廠:
"use strict";
fwApp.factory('fwMainService', function ($http) {
var mFac = {};
mFac.checkUsernameAvailability = function (username) {
if(username != '') {
if(username.length >= 3) {
$http.post('api/user/usernameInUse.php', {newUser: username})
/* returns '1' if in use, '0' if free */
.success(function (res) {
if(res == '1') { // Username in use
return 'In Use!';
} else if(res == '0') {
return 'Free!';
}
})
.error(function (error) {
console.log("username check error: ", error);
});
} else {
return 'Username too short!';
}
} else {
return ''; // if empty, do not check
}
};
[...]
// Public API
return {
checkUsernameAvailability: function (username) {
return mFac.checkUsernameAvailability(username);
},
[...]
我的控制器:
"use strict";
fwApp.controller('IndexCtrl',
['$scope', '$http', '$timeout', '$location', 'fwMainService',
function ($scope, $http, $timeout, $location, fwMainService) {
/* username input field model = newUser.username */
$scope.$watch("newUser.username", function (newValue, oldValue) {
if(angular.equals(newValue, oldValue)) {
return;
}
fwMainService.checkUsernameAvailability(newValue).then(function (res) {
console.log("return", res.data);
$scope.newUserMsg = res.data; // Setting infobox to "Free!" or "In Use!"
}, function (error) {
console.log("username check Error:", error);
});
});
[...]
編輯#1:我加了的jsfiddle:http://jsfiddle.net/Kyrm/71kz617g/6/ 也許有人會受到它的工作...
試試這個返回checkUsernameAvailability(username); – carton
究竟在哪裏? – Kapparina
在您的工廠更換 返回mFac.checkUsernameAvailability(用戶名);通過返回checkUsernameAvailability(username); (我不知道這個解決方案,但你可以嘗試) – carton