我可以使用ui-sref使用URL和参数调用ui-router状态吗?

时间:2016-04-26 03:57:49

标签: angularjs angular-ui-router

我们的应用程序中有三个页面,可以在一个父页面下分类,如下所示。

1)Parent
  I)Child1
  II)Child2
  III)ChildIII

.state('Parent', {
            url: '/Parent/:ID',
            templateUrl: 'parent.html',
controller:'parentcontroller'
        })
.state('Parent.Child1', {
            url: '/Child1',
            templateUrl: 'Child1.html'
        })
.state('Parent.Child2', {
            url: '/Child2',
            templateUrl: 'Child2.html'
        })
.state('Parent.Child3', {
            url: '/Child3',
            templateUrl: 'Child3.html'
        })

有时我们需要从child1到child3一个接一个地顺序调用这些子页面而没有参数,有时我们需要单独调用这些子页面,但是请求需要通过父控制器,这样我们就不必实例化新的控制器实例对于每个子页面。为了实现这一点,我正在使用href,但我希望能够通过父母和孩子而不通过任何参数。 工作href ex: <a href='../Parent/{{ID}}/child1' 不工作: <a href='../Parent/child1'

任何人都可以指导我完成这个吗?谢谢!

溶液:

 .state('Parent', {
                url: '/Parent/:ID',
                templateUrl: 'parent.html',
    controller:'parentcontroller',
               params:{ID:null}
            })
    .state('Parent.Child1', {
                url: '/Child1',
                templateUrl: 'Child1.html'
            })
    .state('Parent.Child2', {
                url: '/Child2',
                templateUrl: 'Child2.html'
            })
    .state('Parent.Child3', {
                url: '/Child3',
                templateUrl: 'Child3.html'
            })

From HTML:<a ui-sref="(Parent.Child1{ID:{{value}}})">Home</a>

我不知道如果我们如上所述使用SREF并且在父值处声明的控制器仍然可以读取params但是给了一个镜头并且它有效!

2 个答案:

答案 0 :(得分:0)

我对你要问的内容有点困惑,但听起来的方式是所有页面都使用相同的控制器。如果是这样,那就让他们吧。控制器最终将在不再需要时被销毁,因此实例化一个新控件很好。如果您要路由到新页面,它将查找随附的控制器。

- 根据OP的评论进行编辑 -

如果目标只是获取一次数据,则可以将其存储在服务中。每个服务都是单例,因此如果您获取数据并将其保存在服务中,您可以将该服务注入其他地方并访问它。

答案 1 :(得分:0)

是的,你可以这样做。首先,你应该在你的 .state()中定义你的params,如果你将params传递给 child1 状态,那么它应该如下定义,

.state('Parent.Child1', {
    url: '/Child1',
    templateUrl: 'Child1.html',
    params: {
        paramName: ''  //here paramName can be named by your wish.
    }
})

之后你应该调用状态并在ui-sref中传递param,如下所示,

<a ui-sref="Parent.Child1({paramName: scopeName})">Click</a>

这里scopeName是具有param值的作用域的名称,如果你想要硬编码一个字符串,那么你可以传入qoutes,({paramName:&#39; some string&#39;})