У меня был рабочий прототип представлений состояний с жестко закодированными значениями, но когда я попытался включить контроллер, он нарушил ссылки ui-sref, и они, похоже, не указывают на что-либо. Я могу удалить атрибут ng-controller, и они снова работают, но отобразится просто отлично.
Я также попытался подключить ng-controller к div в шаблоне, предварительно отказавшись от контроллера в index.html, и хотя это не нарушает связь, я не могу заставить какие-либо выражения в шаблоне работать, и наличие контроллера будет субоптимальным для целей моего приложения, если я смогу его избежать.
Какие ограничения контроллеров и взглядов я не понимаю?
index.html фрагмент
<div class="main" ng-controller="MainCtrl">
<a ui-sref="StateA">AAAAA</a>
<div ui-view></div>
</div>
app.js
var app = angular.module('app', ['ui.router']);
app.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('StateA', {
url: "/a",
templateUrl: "views/a.html",
controller: "MainCtrl"
})
});
MainCtrl.js
app.controller("MainCtrl", [$scope, function($scope, paramGroups) {//empty controller//}]);
Помимо некоторых синтаксических ошибок, которые возникают у вас, основная проблема заключается в понимании того, как работает ui-router.
Когда вы определяете что-то вроде:
.state('StateA', {
url: "/a",
templateUrl: "views/a.html",
controller: "MainCtrl"
})
Это означает, что при a.html
на маршрут /a
частичный a.html
который будет отображаться в вашем ui-view
, получит область для MainCtrl
.
Там нет точки, определяющей ng-controller='MainCtrl'
для элемента, который является родительским элементом ui-view
потому что ui-view
автоматически получит область действия MainCtrl
при MainCtrl
маршрута.
Маршрут прерывается, когда вы объявляете этот ng-controller
потому что вы пытаетесь вставить один и тот же контроллер внутри себя.