Я назвал взгляды:
.state('home', {
url: '/',
views: {
'' : {
templateUrl: '/layouts/main.html',
controller: ['$rootScope', function($rootScope) {
$rootScope.css.background = "#ebeced";
}]
},
'nav@home': { templateUrl: '/templates/nav.html' },
'menu@home': { templateUrl: '/home/menu.html'},
'main@home': { templateUrl: '/templates/feed.html' },
'footer@home': { templateUrl: '/home/footer.html' }
}
})
и main.html
выглядит так (обратите внимание на ng-контроллер):
<div ng-controller="baseCtrl">
<div ui-view="nav"></div>
<div class="wrapper">
<div id="menu">
<div ui-view="menu"></div>
</div>
<div ui-view="main"></div>
<div id="footer">
<div ui-view="footer"></div>
</div>
</div>
</div>
Мой baseCtrl
не распознает значения ng-model
в текстовых полях в любом из ui-view
s.
<input type="text" ng-model="url" ng-blur="addUrl()" />
и baseCtrl
:
$scope.url = ""; //required or get error about not being defined
$scope.addUrl = function() {
console.log($scope.url); //nothing???
}
Я что-то делаю глупо?
ОБНОВЛЕНИЕ: Я думаю, что я решил проблему - мне нужно также определить baseCtrl
как контроллер для каждого представления.
Этот блок может быть некорректным:
'' : {
templateUrl: '/layouts/main.html',
//..etc
Вы уверены, что неназванный элемент должен быть ключом в объекте конфигурации состояния? Вы можете попытаться поставить его differenlty:
.state('home', {
url: '/',
templateUrl: '/layouts/main.html',
controller: ['$rootScope', function($rootScope) {
$rootScope.css.background = "#ebeced";
}],
views: {
'nav@home': { templateUrl: '/templates/nav.html' },
'menu@home': { templateUrl: '/home/menu.html'},
'main@home': { templateUrl: '/templates/feed.html' },
'footer@home': { templateUrl: '/home/footer.html' }
}
})
templateUrl
отменяется.