将解析提供程序从子状态注入到控制器

Inject a resolve provider from child state to controller

所以我试图从 url 参数中提取一些 id

这是我的状态:

$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 See error here.

我该如何解决这个问题?谢谢。

编辑

Jay Shukla 提供的答案帮助我得到了这个想法。

parameterundefined 因为我在实际调用子状态之前在父状态上声明了控制器,子状态包含来自 url 的值。这是我在 Jay Shukla 的帮助下想出的一个简单解决方案。

$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>

想法是:

Only state is nested but both html are separate so controller models will not be inherited - Jay Shukla

每个州都可以有自己的控制器。

请add/edit更多地改进这个问题。

尝试注入 $stateParams 然后您将在该对象中获得 id。

像这样

.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