Подтвердить что ты не робот

Ui-router вложенный контроллер маршрута не вызывается

Я пытаюсь вызвать контроллер, который должен быть связан с маршрутом home.category, но он не вызывается. Что в этом плохого?

$stateProvider    
  .state("home", {
    // Use a url of "/" to set a states as the "index".
    url: "/",
    templateUrl: APP_CONFIG.baseUrl +
      'partials/layouts/home.html',
    controller: 'MainCtrl'
  })
  .state("home.category", {
    // Use a url of "/" to set a states as the "index".
    url: "c/:categoryId/:categorySlug",
    controller: function($stateParams) {
      alert($stateParams.categoryId);
    }
  })
4b9b3361

Ответ 1

Ну, я нашел ключ из данной документации ui-router, говорит

Вы можете назначить контроллер вашему шаблону. Предупреждение: Контроллер не будет создан, если шаблон не определен.

https://github.com/angular-ui/ui-router/wiki#controllers

Но я попытался добавить template и все еще не работал, тогда я увидел, что у моего родительского шаблона маршрута не было <div ui-view></div> (я ошибочно удалил его), поэтому, когда я добавил его обратно, он работал:), Итак, чтобы создать экземпляр нашего контроллера детского маршрута, мы должны иметь <div ui-view></div> в нашем родительском шаблоне маршрута.

Ответ 2

Другая причина, по которой контроллер не может быть вызван, - это если у вас несколько представлений для состояния и не помещайте контроллер внутри объекта views. Это трудно найти, потому что ошибки нет. Это просто не вызвано.

Этот контроллер не будет вызываться:

.state('home', {
    url: '/',
    controller: function($scope){ $scope.someThings = "some stuff"; },
    views: {
        "view1": {                
            template: '<p>{{someThings}}</p>'
        },
        "": {
            template:
                '<p>Some other stuff</p>'
        }
    }
})

Контроллер должен войти в объект вида:

.state('home', {
    url: '/',        
    views: {
        "view1": {                
            template: '<p>{{someThings}}</p>',
            controller: function($scope){ $scope.someThings = "some stuff"; },
        },
        "": {
            template:
                '<p>Some other stuff</p>'
        }
    }
})

Ответ 3

В отключенном случае кто-то меняет проект на работу с ui.router, в отличие от ngRoute, у меня была эта проблема, потому что я забыл изменить директиву ng-view на ui-view: Z