Как привязывать контроллеры, содержащиеся в папке, к представлениям в angularjs динамически
У меня есть контроллер в папке с именем 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) {})]);
Если я упоминаю "sub" вместо "subsd" в loginController.js, маршрутизация перестает работать.
Ответы
Ответ 1
Окончательный ответ включает в себя несколько вещей, которые нужно сделать:
- Удалите
<div ng-controller="loginController">
из файла шаблона login.html.
- Переместите зависимость
'ngCookies'
к определению модуля sub
в файле controller/one.js(angular.module('sub',["ui.router", "ngCookies"])
).
- В файле контроллеров /logincontroller.js снова измените имя модуля от
subsd
до sub
и удалите второй аргумент из модуля sub
invoke, чтобы он выглядел следующим образом: angular.module('sub').controller(...)
.
Когда вы изменили имя модуля ранее, вы пытались переопределить, что является ошибкой.
Это
angular.module('moduleName', [...dependencies])
- это модуль setter, а этот
angular.module('moduleName')
- это модуль getter.
Ответ 2
Вы имеете в виду:
$stateProvider
.state('index', {
url: "/login",
views: {
"viewA": {
templateUrl: "login.html",
// THIS ?
controller: "LoginController"
}
}
})
})
Также не забудьте удалить атрибут ng-controller
из представления.