Внедрить поставщик разрешения из дочернего состояния в контроллер

0

Поэтому я пытаюсь вывести некоторый id из параметров URL.

Вот мои состояния:

$stateProvider
    .state('parent', {
        url: '/parent',
            templateUrl: 'path/to/parent.html',
            controller: 'lolController'
        })
    .state('parent.child', {
        url: '/child-profile/:id',
        templateUrl: 'path/to/child.html',
        resolve: {
            someId: function  ($stateParams) {
                // I cant print the id from here
                console.log("PARAMS", $stateParams.id)
                return $stateParams.id;
            }
          },
    })

контроллер

.controller('lolController', 
    ['$scope', 'someId', function ($scope, someId) {

     $scope.someId = someId;

}])

Но всякий раз, когда я пытаюсь получить доступ к url /parent/child-profile/123abc я получаю сообщение об ошибке Unknown provider: someId См. Здесь ошибку. ,

Как это исправить? Благодарю.

РЕДАКТИРОВАТЬ

Ответ, предоставленный Jay Shukla, помог мне получить эту идею.

parameter не undefined потому что я объявил контроллер в родительском состоянии, прежде чем на самом деле вызывать дочернее состояние, которое содержит значение из его url. Вот простое решение, с которым я столкнулся, с помощью Джей Шуклы.

$stateProvider
    .state('parent', {
        url: '/parent',
            templateUrl: 'path/to/parent.html',
        })
    .state('parent.child', {
        url: '/child-profile/:id',
        templateUrl: 'path/to/child.html',
        controller: 'lolController'
    })

Я удалил объявление controller из родительского состояния и переместил его в дочернее состояние. Поскольку в моей ситуации шаблон родительского состояния содержит только <div ui-view></div>.

Идея такова:

Только состояние вложенно, но оба html разделены, поэтому модели контроллера не будут унаследованы - Jay Shukla

Каждое государство может иметь свой собственный контроллер.

Пожалуйста, добавьте/отредактируйте еще, чтобы улучшить этот вопрос.

Теги:
angular-ui-router

1 ответ

3
Лучший ответ

Попробуйте ввести $stateParams тогда вы получите идентификатор в этом объекте.

Как это

.controller('lolController', 
    ['$scope', '$stateParams', function ($scope, $stateParams) {

     $scope.someId = $stateParams.id;

}])

Вы также можете определить свои параметры по-разному, как показано ниже.

url: '/child-profile/:id', // Inside stateparams you will get id as key
OR
url: '/child-profile/{id}',
OR
url: '/child-profile/:{id:int}', // Id with integer value
  • 0
    Это говорит неопределенный. :(
  • 0
    Какой у вас URL и какая полная ошибка
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню