2016-12-14 21 views
0

首先,我有一個名爲angular-controller.js的文件,其中有我的應用程序控制器,並在其工作的html ng控制器中調用它。現在我決定再拍文件,工廠文件,以分離控制文件的一些功能,但現在有一個錯誤: Error: Argument 'LoginController' is not a function, got undefined at assertArg (angular.js:1099) at assertArgFn (angular.js:1109) at angular.js:4978 at angular.js:4560 at forEach (angular.js:137) at nodeLinkFn (angular.js:4545) at compositeLinkFn (angular.js:4191) at publicLinkFn (angular.js:4096) at angular.js:1660 at Object.$eval (angular.js:8218)Angularjs控制器不是一個函數,在創建工廠文件後得到了undefined

這是我的角controller.js(我的控制器):

var app = angular.module("StaffLogin", []); 
 

 
app.controller("LoginController", function($scope, $http, restService) { 
 
    $scope.stafflogins = []; 
 
    $scope.staffLoginForm = { 
 
     email: "", 
 
     pass: "" 
 
    }; 
 
    $scope.tokenStaffForm = { 
 
     idtokenstaff: -1,  
 
     tokenstaff: "" 
 
    }; 
 
    $scope.staffForm = { 
 
     idstaff : -1,  
 
     staffType: { 
 
      idstaffType: -1, 
 
      type: "" 
 
     }, 
 
     name: "", 
 
     surname: "", 
 
     birthDate: "", 
 
     phone: "", 
 
     gender: true, 
 
     working: true, 
 
     staffLogin: { 
 
      idstaffLogin: -1, 
 
      email: "", 
 
      pass: "" 
 
      } 
 
    }; 
 
    
 
    $scope.submitCredentials= function() { 
 
     restService.login(); 
 
     console.log($scope.staffLoginForm); 
 
     /* $http({ 
 
      method : 'POST', 
 
      url : 'http://localhost:8080/FoodDrinkDispener/rest/tokenstaff', 
 
      data : angular.toJson($scope.staffLoginForm), 
 
      }).then(function successCallback(response) { 
 
        if (typeof response.data === 'object'){ 
 
         _logsuccess(response) 
 
         return response.status; 
 
        } 
 
        else 
 
         _logerror(response); 
 
        },function (response) { 
 
        console.log($scope.tokenStaffForm); 
 
         _logerror(response); 
 
        } 
 
        );*/ 
 
      
 
       } 
 
     
 
      
 
      
 
    function _SetToken(CurrentToken) { 
 
     sessionStorage.setItem("token", (CurrentToken === null) ? null : JSON.stringify(CurrentToken)); 
 
     //console.log(CurrentToken);  
 
    } 
 
     
 
    function _logsuccess(response) { 
 
     console.log("Loggato correttamente"); 
 
     console.log(response.status); 
 
     var CurrentToken = response.data; 
 
     _SetToken(CurrentToken);           
 
    } 
 
      
 
    function _logerror(response) { 
 
     console.log("Login fallito"); 
 
     console.log(response.status); 
 
     _SetToken(null);          
 
    } 
 
     
 
     
 

 
    
 
    
 

 
    console.log(sessionStorage.getItem.toString); 
 
    });

這是我廠的文件名爲REST的services.js:

//'use strict'; 
 

 
var app = angular.module("StaffLogin", []); 
 
app.factory("restService", function($scope, $http) { 
 
    var REST_URL = "http://localhost:8080/FoodDrinkDispener/rest/"; 
 
    
 
    function _GetToken() { 
 
     var token = sessionStorage.getItem("token"); 
 
     if (token !== null) 
 
      return JSON.parse(token); 
 
    } 
 
    
 
    function _SetToken(CurrentToken) { 
 
     sessionStorage.setItem("token", (CurrentToken === null) ? null : JSON.stringify(CurrentToken)); 
 
    } 
 
    
 
    return { 
 
     login: function(loginform){ 
 
      return $http({ 
 
      method : 'POST', 
 
      url : REST_URL+'tokenstaff', 
 
      data : angular.toJson(loginform), 
 
      }).then(function successCallback(response) { 
 
        if (typeof response.data === 'object'){ 
 
         // _logsuccess(response) 
 
         console.log("login andato a buon fine"); 
 
         return response.status; 
 
        } 
 
        else 
 
         console.log("login error"); 
 
        },function (response) { 
 
        console.log($scope.tokenStaffForm); 
 
         console.log("login error"); 
 
        } 
 
        ); 
 
     }  
 
     
 
    } 
 
    
 
    
 
});

,這是我的html文件,我叫控制器 「的LoginController」

<!DOCTYPE html> 
 
<!-- saved from url=(0066)https://hackerstribe.com/guide/IT-bootstrap-3.1.1/examples/signin/ --> 
 
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 
    
 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
 
    <meta name="description" content=""> 
 
    <meta name="author" content=""> 
 
    <link rel="shortcut icon" href="images/puzzle.png" /> 
 

 
    
 

 

 
    
 
    <title>Login</title> 
 

 
    <!-- Bootstrap core CSS --> 
 
    <link href="./styles/bootstrap.min.css" rel="stylesheet"> 
 

 
    <!-- Custom styles for this template --> 
 
    <link href="./styles/signin.css" rel="stylesheet"> 
 

 
    <!-- Just for debugging purposes. Don't actually copy this line! --> 
 
    <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]--> 
 

 
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> 
 
    <!--[if lt IE 9]> 
 
     <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> 
 
     <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> 
 
    <![endif]--> 
 
    </head> 
 

 
    <body ng-app="StaffLogin" ng-controller="LoginController" ng-fa> 
 

 
    <div class="container"> 
 

 
     <form class="form-signin" role="form" ng-controller="LoginController" ng-submit="submitCredentials()" novalidate> 
 
     <h2 class="form-signin-heading">Hai bisogno di autenticarti</h2> 
 
     <input type="email" class="form-control" placeholder="Email address" required="" autofocus="" id="email" ng-model="staffLoginForm.email"> 
 
     <input type="password" class="form-control" placeholder="Password" required="" id="password" ng-model="staffLoginForm.pass"> 
 
     <label class="checkbox"> 
 
      <input type="checkbox" value="remember-me"> Ricordami 
 
     </label> 
 
     <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> 
 
     </form> 
 

 
    </div> <!-- /container --> 
 

 

 
    <!-- Bootstrap core JavaScript 
 
    ================================================== --> 
 
    <!-- Placed at the end of the document so the pages load faster --> 
 
    
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.js"></script> 
 
    <script src="scripts/angular.js"></script> 
 
    <script type="application/javascript"></script> 
 
    <script src="scripts/login-controller.js"></script> 
 
    <script src="scripts/rest-services.js"></script> 
 

 
</body></html>

我希望有人能幫助我

+1

你給ng控制器2次.. – Chetan

+0

看來你沒有在你的'index.html'文件中包含'angular-controller.js'文件嗎? –

+0

@Chetan我試圖刪除其中一個調用控制器,但事情不改變 ,沒有工廠工作 –

回答

1

工廠文件休息 - services.js,更改:

var app = angular.module("StaffLogin", []); 


`var app = angular.module("StaffLogin");` 
app.factory("restService", function($http) { 
     // code 
}); 
  • 不能添加$範圍在工廠/服務的依賴性。
  • +0

    以這種方式給我看另一個錯誤: angular.js:5930錯誤:[$ injector:unpr]未知提供者:$ scopeProvider < - $ scope < - restService –

    +0

    我的錯誤。您不能在工廠中包含$ scope – Ved

    +0

    現在,它的工作原理!非常感謝 –

    相關問題