2017-05-14 122 views
0

出于某种原因,我的控制器似乎并没有登记注册,我真的不知道为什么...控制器不按控制台

我一直沿着PluralSight的AngularJS和Django开发过程如下。教师的堆栈和我的唯一区别是我使用的是Angular 1.6.4,他使用的是1.5.0。我以前遇到过一些错误(如路由语法),但总体来说还不错。

编辑:

我要指出,我只是按照教练的指示和编写相同的代码作为他。


然而,现在,我只是卡住了。我有这个路由在scrumboard.config.js

(function() { 

    "use strict"; 

    angular.module('scrumboard.demo', ["ngRoute"]) 
     .config(["$routeProvider", config]) 
     .run(["$http", run]); 

     function config($routeProvider) { 

      $routeProvider 
       .when('/', { 
        templateUrl: "/static/html/scrumboard.html", 
        controller: "ScrumboardController", 
       }) 
       .when('/login', { 
        templateUrl: "/static/html/login.html", 
        controller: "LoginController", 
       }) 
       .otherwise('/'); 
     } 

     function run($http) { 
      $http.defaults.xsrfHeaderName = 'X-CSRFToken'; 
      $http.defaults.xsrfCookieName = 'csrftoken'; 
     } 
})(); 

而这个控制器的login.html

(function() { 

    "use strict"; 

    angular.module("scrumboard.demo", []) 
     .controller("LoginController", 
        ["$scope", "$http", "$location", LoginController]); 

    function LoginController($scope, $http, $location) { 

     $scope.login = function() { 

      $http.post('/auth_api/login/', $scope.user) 
       .then(function (response){ 
        $location.url("/"); 
       }, 
       function(error) { 
        //failure 
        $scope.login_error = "Invalid username or password"; 
       }); 
     }; 
    }; 

})(); 

当导航到localhost:8000/#!/login我可以看到我的形式:

<form ng-submit="login()"> 
    <div style="...">{{ login_error }}</div> 
    <div> 
     <label>Username</label> 
     <input type="text" ng-model="user.username"/> 
    </div> 
    <div> 
     <label>Password</label> 
     <input type="password" ng-model="user.password"/> 
    </div> 
    <div> 
     <button type="submit">Submit</button> 
    </div> 
</form> 

但由于一些奇怪的原因,我的控制台告诉我,我的LoginController不是注册。

任何人都可以帮助我在正确的方向吗?

对不起,如果我缺少任何类型的文件,但我对Angular很陌生,所以我不知道要添加什么。

如果您需要任何附加信息,请告诉我!

+0

你可以在index.html中显示加载脚本标记的顺序吗? – zaidfazil

回答

1

从您的控制器的定义中删除[]login.html

angular.module("scrumboard.demo") 
    .controller("LoginController", 
       ["$scope", "$http", "$location", LoginController]); 
+0

正如在其他答案中提到的,我尝试了使用和不使用'[]',但路线仍然似乎抛出相同的hissyfit ... – geostocker

+0

@geostocker你有'ScrumboardController'相同的代码,如果是的话移动'[]'也在那里。 – Pengyy

+0

@geostocker是的,我做了很多次:P – Pengyy

0

您声明模块scrumboard.demo两次。

[]

angular.module("scrumboard.demo") 
     .controller("LoginController", 
        ["$scope", "$http", "$location", LoginController]); 

如果没有angular.module()第二个参数是一个getter删除,否则它是一个setter

+0

这也是我的想法,但即使没有'[]'也会引发同样的hissyfit。我添加了'[]'来检查它是否会产生任何不同。感谢您的建议,但! :) – geostocker

+0

当你在教程中回滚到相同版本时会发生什么......并确保'ngRoute'版本也匹配? – charlietfl

+0

你还忘了包含'LoginController'文件吗? – charlietfl

0

在入口点HTML,文件scrumboard.config脚本标签。 js应该在文件控制器文件之前。同样作为@charlietfl说宣布两次应该被删除。

这样,

<script src="your_path/scrumboard.config.js"></script> 
<script src="your_path/scrumboard.controller.js"></script> 

希望这会解决问题。