从子状态向控制器

时间:2015-11-30 08:27:45

标签: angularjs angular-ui-router ui-sref

所以我试图从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;

}])

但是,每当我尝试访问网址/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>

这个想法是:

  

只有状态是嵌套的,但两个html是分开的,因此控制器模型不会被继承 - Jay Shukla

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

请添加/修改更多内容以改善此问题。

1 个答案:

答案 0 :(得分:3)

尝试注入.controller('lolController', ['$scope', '$stateParams', function ($scope, $stateParams) { $scope.someId = $stateParams.id; }]) ,然后你将在该对象中获得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

您还可以通过以下不同方式定义参数

<script>
 function downloadpdf(){
    html2canvas(document.body,
        {
            onrendered: function(canvas){
                var imgData = canvas.toDataURL("image/jpeg");
                var a = document.createElement('a');
                var doc = new jsPDF('p','mm');
                doc.addImage(imgData, 'JPEG', 15, 40, 180, 160);
                doc.save($.now()+'.pdf');

        }
    });
}
</script>