簡體   English   中英

angularjs工廠未定義

[英]angularjs factory is undefined

我有以下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
            });
    }

});

})();

現在,當我調用登錄函數時,出現一條錯誤消息,告訴我UserFactory is undefined

誰能告訴我我做錯了什么?

我的表格

        <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依賴注入器無法讀取變量名稱,最終看起來像:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM