Javascript angularjs工厂未定义

Javascript angularjs工厂未定义,javascript,angularjs,Javascript,Angularjs,我有以下userModule: (function () { var userModule = angular.module('user', [ 'Auth' ]); userModule.controller('UserController', ['$http', '$scope', function (UserFactory) { var uc = this; uc.user ={}; //set when login uc.login = login;

我有以下
userModule

(function () {
var userModule = angular.module('user', [
    'Auth'
]);

userModule.controller('UserController', ['$http', '$scope', function (UserFactory) {
    var uc = this;
    uc.user ={}; //set when login

    uc.login = login;

    function login(username, password)
    {
        UserFactory.login(username,password).then(function success(reponse){
            uc.user = reponse.data
        })
    }
}]);

userModule.factory('UserFactory', function UserFactory ($http)
{
    'use strict';
    return{
        login: login
    };
    function login(username, password)
    {
        return $http.post(API_URL + '/login',
            {
                username: username,
                password: password
            });
    }

});

})();
现在,当我调用login函数时,我得到一个错误,告诉我,
UserFactory是未定义的

谁能告诉我我做错了什么

我的表格

        <form class="panel-body wrapper-lg" ng-controller="UserController as userCtrl"
          ng-submit="userCtrl.login(userCtrl.user.username, userCtrl.user.password)" >
        <div class="form-group">
            <label class="control-label">Brugernavn</label>
            <input type="email" class="form-control input-lg" id="txt_username" name="username"
                   placeholder="Brugernavn" ng-model="userCtrl.user.username">
        </div>
        <div class="form-group">
            <label class="control-label">Kodeord</label>
            <input type="password" name="password" placeholder="Kodeord" class="form-control input-lg"
                   ng-required="" ng-model="userCtrl.user.password">
        </div>
        <input type="submit" class="btn btn-lb-primary" value="Log på">

    </form>

布鲁格纳文
科多尔

当使用数组作为第二个参数定义控制器时,实际上只是告诉角度依赖注入引擎在作为最后一个参数的函数/闭包中注入什么。因此,您必须显式地告诉它注入UserFactory。在您的情况下,控制器闭包中的UserFactory将是
$http
服务的一个实例

userModule.controller('UserController', ['$http', '$scope', 'UserFactory', function ($http, $scope, UserFactory) {
    var uc = this;
    uc.user ={}; //set when login

    uc.login = login;

    function login(username, password)
    {
        UserFactory.login(username,password).then(function success(reponse){
            uc.user = reponse.data
        })
    }
}]);
虽然我不确定这是否有什么区别,但我喜欢按时间顺序声明我的模块、服务等,即首先创建
userModule
,然后创建
UserFactory
,最后创建控制器

作为优化的想法,请尝试使用与控制器相同的工厂语法:

userModule.factory('UserFactory', ['$http', function UserFactory ($http)
{
    //....
}]);
使用数组语法的原因是,当您缩小js时,您的局部变量将具有无法解析为服务的名称,因为angulars dependency injector无法读取变量名称,最终看起来像:

userModule.factory('UserFactory', ['$http', function UserFactory (t)
{
    //....
}]);

当使用数组作为第二个参数定义控制器时,实际上只是告诉角度依赖注入引擎在作为最后一个参数的函数/闭包中注入什么。因此,您必须显式地告诉它注入UserFactory。在您的情况下,控制器闭包中的UserFactory将是
$http
服务的一个实例

userModule.controller('UserController', ['$http', '$scope', 'UserFactory', function ($http, $scope, UserFactory) {
    var uc = this;
    uc.user ={}; //set when login

    uc.login = login;

    function login(username, password)
    {
        UserFactory.login(username,password).then(function success(reponse){
            uc.user = reponse.data
        })
    }
}]);
虽然我不确定这是否有什么区别,但我喜欢按时间顺序声明我的模块、服务等,即首先创建
userModule
,然后创建
UserFactory
,最后创建控制器

作为优化的想法,请尝试使用与控制器相同的工厂语法:

userModule.factory('UserFactory', ['$http', function UserFactory ($http)
{
    //....
}]);
使用数组语法的原因是,当您缩小js时,您的局部变量将具有无法解析为服务的名称,因为angulars dependency injector无法读取变量名称,最终看起来像:

userModule.factory('UserFactory', ['$http', function UserFactory (t)
{
    //....
}]);

这仍然给了我未定义的功能,但是我认为它的登录功能是未定义的。你的优化想法给了我一个错误,说它无法加载module@MarcRasmussen你在哪里调用你的登录功能?如果从指令执行,即从
ngClick
f.x.,则必须将其定义为作用域上的属性<代码>$scope.login=登录@Dencker我发布了我的formMarc-尝试注入
$log
服务,并在控制器fire
$log.log(UserFactory)中
。这仍然给了我未定义的功能,但是我认为它的登录功能是未定义的。您的优化想法给了我一个错误,说它无法加载module@MarcRasmussen你在哪里调用你的登录功能?如果从指令执行,即从
ngClick
f.x.,则必须将其定义为作用域上的属性<代码>$scope.login=登录@Dencker我发布了我的formMarc-尝试注入
$log
服务,然后在控制器fire
$log.log(UserFactory)
中。