如何动态地将文件夹中包含的控制器绑定到angularjs中的视图

时间:2015-02-25 18:47:11

标签: javascript angularjs angular-ui-router

我在根目录下名为controller的文件夹中有一个控制器。 我认为我想在路线改变时附加到相应的视图。我正在使用angular-ui-router。

控制器/ one.js

angular.module('sub',["ui.router"]).config(function($stateProvider){
$stateProvider
    .state('index', {
        url: "/login",
        views: {
            "viewA": {
                templateUrl: "login.html"
            }
        }
    })
    .state('register', {
        url: "/register",
        views: {
            "viewA": {
                templateUrl: "register.html" 
            }
        }
    })
    .state('upload', {
        url: "/upload",
        views: {
            "viewA": {
                templateUrl: "upload.html" 
            }
        }
    })
})

的test.html

    <!DOCTYPE html>
    <html ng-app="sub">

    <head>
        <title>AngularJS: UI-Router Quick Start</title>
        <!-- Bootstrap CSS -->
        <link href="bootstrap.min.css" rel="stylesheet">
    </head>

    <body class="container">

      <div class="navbar">
        <div class="navbar-inner">
          <a class="brand" ui-sref="index">Quick Start</a>
          <ul class="nav">
            <li><a ui-sref="index">Home</a></li>
            <li><a ui-sref="register">Register</a></li>
            <li><a ui-sref="upload">upload</a></li>
          </ul>
        </div>
      </div>

      <div class="row">
        <div class="span6">
          <div class="well" ui-view="viewA"></div>        
        </div>
      </div>
  <script type="text/javascript" src="angular.min.js"></script>
<script type="text/javascript" src="Controllers/one.js"></script>
<script type="text/javascript" src="angular-cookies.js"></script>
<script type="text/javascript" src="Controllers/loginController.js"></script> 
<script type="text/javascript" src="Controllers/uploadController.js"></script>
<script type="text/javascript" src="Controllers/registerController.js"></script>
<script type="text/javascript" src="angular-ui-router.js"></script> 
<script type="text/javascript" src="jquery-2.1.3.min.js"></script>
</body>

</html>    

的login.html

<div ng-controller="loginController">
<p>
             UserName: 
            <input id="director" type="text" ng-model="mUserName"/>
        </p>

        <p>
             Password: 
            <input id="actor" type="text" ng-model="mPassWord"/>
        </p>
        <button ng-click="login()">Login</button>
 </div>

控制器/ LoginController.js

angular.module('subsd',["ngCookies"]).controller('loginController', ['$http','$scope','$cookies',function($http,$scope,$cookies) {})]);

如果我提及&#39; sub&#39;而不是&#39; subsd&#39;在loginController.js中,路由停止工作。

2 个答案:

答案 0 :(得分:2)

最后的答案包括几件事:

  1. login.html 模板文件中删除<div ng-controller="loginController">
  2. 'ngCookies'依赖项移至 controllers / one.js 文件(sub)中的angular.module('sub',["ui.router", "ngCookies"])模块定义。
  3. controllers / logincontroller.js 文件中,再次将模块名称从subsd更改为sub,并从sub模块调用中删除第二个参数,使它看起来像这样:angular.module('sub').controller(...)
  4. 之前更改模块名称时,您尝试重新定义,这是一个错误。

    angular.module('moduleName', [...dependencies])
    

    是模块 setter ,而这个

    angular.module('moduleName')
    

    getter 模块。

答案 1 :(得分:0)

你的意思是:

$stateProvider
    .state('index', {
        url: "/login",
        views: {
            "viewA": {
                templateUrl: "login.html",

                // THIS ?
                controller: "LoginController"
            }
        }
    })        
})

请记得从视图中删除ng-controller属性。