#javascript #html #angularjs #angular-ui-router
#javascript #HTML #angularjs #angular-пользовательский интерфейс-маршрутизатор
Вопрос:
Я использую angular-ui-router, и у меня есть несколько разделений ui-view, как показано ниже:
<!DOCTYPE html>
<html ng-app="myApp">
<!-- loading libraries here etc -->
<div ui-view="viewA"></div>
</html>
У каждого представления есть свой собственный контроллер, и мне нужно разрешить зависимости, переданные в эти контроллеры. Я попробовал следующее и не понимаю, почему это не работает:
var myApp = angular.module('myApp', ['ui.router']);
myApp.config(function($stateProvider) {
$stateProvider
.state('index', {
url: "",
views: {
"viewA": {
template: "{{test}}",
resolve: {
test: function(){
return {
value: 'Hello World!'
};
}
},
controller: testController
},
}
});
});
myApp.controller('testController', function($scope, test){
$scope.test = test.value;
});
Не имеет значения, объявляю ли я контроллер до или после вызова config. Встроенное использование контроллера действительно работает, но со временем это стало бы громоздким и сложным в обслуживании, я хочу сохранить его в собственном файле.
У меня сложилось впечатление, что angular был достаточно умен, чтобы ждать загрузки зависимостей при начальной загрузке вашего приложения, не так ли? Это единственный способ встроить мой контроллер?
Спасибо
Ответ №1:
.config
параметры должны быть записаны таким образом:
controller: 'testController'
т.е. предоставление имени контроллера в виде строки. Без этого вы просто попытаетесь получить доступ к переменной с именем testController
, но в области видимости этой функции ее нет.
Комментарии:
1. Разговоры о невозможности видеть древесину за деревьями, чувствую себя идиотом сейчас! Большое спасибо
2. Ах, это нормально, время от времени случается со всеми нами. ) Совсем недавно ответил на противоположный вопрос, где значения на самом деле должны были передаваться в функцию в переменных, а не в строках.