Разрешение значений для каждого контроллера при использовании нескольких представлений

#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;
});
  

Я создал здесь plunker.

Не имеет значения, объявляю ли я контроллер до или после вызова config. Встроенное использование контроллера действительно работает, но со временем это стало бы громоздким и сложным в обслуживании, я хочу сохранить его в собственном файле.

У меня сложилось впечатление, что angular был достаточно умен, чтобы ждать загрузки зависимостей при начальной загрузке вашего приложения, не так ли? Это единственный способ встроить мой контроллер?

Спасибо

Ответ №1:

.config параметры должны быть записаны таким образом:

 controller: 'testController'
  

т.е. предоставление имени контроллера в виде строки. Без этого вы просто попытаетесь получить доступ к переменной с именем testController , но в области видимости этой функции ее нет.

Комментарии:

1. Разговоры о невозможности видеть древесину за деревьями, чувствую себя идиотом сейчас! Большое спасибо

2. Ах, это нормально, время от времени случается со всеми нами. ) Совсем недавно ответил на противоположный вопрос, где значения на самом деле должны были передаваться в функцию в переменных, а не в строках.